profileShare

rasmusjy / tasteprint

Read-only snapshot

No repository description.

main default branch 169 files Expires Sep 13, 2026, 9:06 AM
index.css 54,937 bytes
1 :root {
2 color-scheme: light;
3 font-family: "Manrope", sans-serif;
4 color: #14213d;
5 background: #f4f7fb;
6 font-synthesis: none;
7 text-rendering: optimizeLegibility;
8 --ink: #14213d;
9 --muted: #647089;
10 --line: #d9e1ed;
11 --paper: #ffffff;
12 --canvas: #f4f7fb;
13 --blue: #2155f5;
14 --blue-dark: #123ab5;
15 --blue-pale: #e8efff;
16 --mango: #ffc857;
17 --coral: #ff6b5e;
18 --mint: #84dcc6;
19 --shadow: 0 18px 55px rgba(20, 33, 61, 0.11);
20 --radius: 18px;
21 }
22
23 * {
24 box-sizing: border-box;
25 }
26
27 html {
28 min-width: 320px;
29 scroll-behavior: smooth;
30 }
31
32 body {
33 margin: 0;
34 min-width: 320px;
35 min-height: 100vh;
36 background: var(--canvas);
37 }
38
39 body, button, input, select, textarea {
40 font-family: "Manrope", sans-serif;
41 }
42
43 button, input, select, textarea {
44 font-size: inherit;
45 }
46
47 button, a {
48 -webkit-tap-highlight-color: transparent;
49 }
50
51 button {
52 cursor: pointer;
53 }
54
55 button:disabled {
56 cursor: not-allowed;
57 opacity: 0.62;
58 }
59
60 a {
61 color: inherit;
62 text-decoration: none;
63 }
64
65 img {
66 display: block;
67 max-width: 100%;
68 }
69
70 h1, h2, h3, p {
71 margin-top: 0;
72 }
73
74 h1, h2, h3 {
75 color: var(--ink);
76 font-family: "Barlow Condensed", sans-serif;
77 line-height: 0.98;
78 }
79
80 h1 {
81 font-size: clamp(2.5rem, 6vw, 5.4rem);
82 letter-spacing: -0.035em;
83 }
84
85 h2 {
86 font-size: clamp(1.55rem, 3vw, 2.15rem);
87 letter-spacing: -0.015em;
88 }
89
90 h3 {
91 font-size: 1.35rem;
92 }
93
94 :focus-visible {
95 outline: 3px solid var(--mango);
96 outline-offset: 3px;
97 }
98
99 .sr-only {
100 position: absolute;
101 width: 1px;
102 height: 1px;
103 padding: 0;
104 margin: -1px;
105 overflow: hidden;
106 clip: rect(0, 0, 0, 0);
107 white-space: nowrap;
108 border: 0;
109 }
110
111 .skip-link {
112 position: fixed;
113 z-index: 200;
114 top: 10px;
115 left: 10px;
116 padding: 10px 14px;
117 border-radius: 8px;
118 background: var(--ink);
119 color: white;
120 transform: translateY(-150%);
121 }
122
123 .skip-link:focus {
124 transform: translateY(0);
125 }
126
127 .eyebrow {
128 display: block;
129 margin-bottom: 8px;
130 color: var(--blue);
131 font-family: "IBM Plex Mono", monospace;
132 font-size: 0.68rem;
133 font-weight: 500;
134 letter-spacing: 0.12em;
135 line-height: 1.4;
136 text-transform: uppercase;
137 }
138
139 .eyebrow-light {
140 color: #dce5ff;
141 }
142
143 .button {
144 display: inline-flex;
145 min-height: 42px;
146 align-items: center;
147 justify-content: center;
148 gap: 8px;
149 padding: 10px 17px;
150 border: 1px solid transparent;
151 border-radius: 10px;
152 font-weight: 700;
153 line-height: 1;
154 transition: transform 140ms ease, box-shadow 140ms ease, background 140ms ease;
155 }
156
157 .button:hover:not(:disabled) {
158 transform: translateY(-1px);
159 }
160
161 .button-primary {
162 background: var(--blue);
163 color: white;
164 box-shadow: 0 8px 20px rgba(33, 85, 245, 0.22);
165 }
166
167 .button-primary:hover:not(:disabled) {
168 background: var(--blue-dark);
169 }
170
171 .button-outline {
172 border-color: #b9c5d8;
173 background: white;
174 color: var(--ink);
175 }
176
177 .button-outline:hover:not(:disabled) {
178 border-color: var(--blue);
179 color: var(--blue);
180 }
181
182 .button-ghost {
183 background: transparent;
184 color: var(--ink);
185 }
186
187 .button-ink {
188 background: var(--ink);
189 color: white;
190 }
191
192 .button-danger {
193 background: #b9232e;
194 color: white;
195 }
196
197 .button-paper, .button-light {
198 background: white;
199 color: var(--ink);
200 box-shadow: 0 8px 20px rgba(20, 33, 61, 0.14);
201 }
202
203 .button-large {
204 min-height: 50px;
205 padding: 14px 21px;
206 }
207
208 .button-full {
209 width: 100%;
210 }
211
212 .text-link, .small-link, .panel-link, .back-link {
213 display: inline-flex;
214 align-items: center;
215 gap: 6px;
216 color: var(--blue);
217 font-weight: 700;
218 }
219
220 .small-link {
221 font-size: 0.82rem;
222 }
223
224 .back-link {
225 margin-bottom: 24px;
226 font-size: 0.86rem;
227 }
228
229 .icon-button {
230 display: inline-grid;
231 width: 40px;
232 height: 40px;
233 flex: 0 0 40px;
234 place-items: center;
235 padding: 0;
236 border: 1px solid var(--line);
237 border-radius: 10px;
238 background: white;
239 color: var(--ink);
240 }
241
242 .icon-button:hover {
243 border-color: var(--blue);
244 color: var(--blue);
245 }
246
247 .icon-button-primary {
248 border-color: var(--blue);
249 background: var(--blue);
250 color: white;
251 }
252
253 .icon-button-danger, .danger-link {
254 color: #b9232e;
255 }
256
257 .brand {
258 display: inline-flex;
259 align-items: center;
260 gap: 9px;
261 width: max-content;
262 }
263
264 .brand-mark {
265 display: grid;
266 width: 38px;
267 height: 38px;
268 place-items: center;
269 border: 2px solid currentColor;
270 border-radius: 50% 48% 51% 46%;
271 color: var(--blue);
272 transform: rotate(-6deg);
273 }
274
275 .brand-mark span {
276 font-family: "IBM Plex Mono", monospace;
277 font-size: 0.72rem;
278 font-weight: 700;
279 transform: rotate(6deg);
280 }
281
282 .brand-word {
283 display: flex;
284 font-family: "Barlow Condensed", sans-serif;
285 font-size: 1.42rem;
286 letter-spacing: -0.03em;
287 }
288
289 .brand-word strong:last-child {
290 color: var(--blue);
291 }
292
293 .panel {
294 padding: 25px;
295 border: 1px solid var(--line);
296 border-radius: var(--radius);
297 background: var(--paper);
298 }
299
300 .page {
301 width: min(1180px, 100%);
302 margin: 0 auto;
303 padding: 48px 44px 72px;
304 }
305
306 .page-header {
307 display: flex;
308 align-items: flex-end;
309 justify-content: space-between;
310 gap: 28px;
311 margin-bottom: 34px;
312 }
313
314 .page-header > div:first-child {
315 max-width: 780px;
316 }
317
318 .page-header h1 {
319 margin-bottom: 12px;
320 font-size: clamp(2.5rem, 5vw, 4.25rem);
321 }
322
323 .page-header p {
324 max-width: 650px;
325 margin-bottom: 0;
326 color: var(--muted);
327 line-height: 1.7;
328 }
329
330 .page-header-action {
331 flex: 0 0 auto;
332 }
333
334 .section-heading {
335 display: flex;
336 align-items: flex-end;
337 justify-content: space-between;
338 gap: 18px;
339 margin-bottom: 20px;
340 }
341
342 .section-heading h2 {
343 margin-bottom: 0;
344 }
345
346 .section-note {
347 display: inline-flex;
348 align-items: center;
349 gap: 6px;
350 color: var(--muted);
351 font-size: 0.78rem;
352 }
353
354 .state-panel, .empty-state {
355 display: flex;
356 min-height: 260px;
357 flex-direction: column;
358 align-items: center;
359 justify-content: center;
360 gap: 10px;
361 padding: 32px;
362 text-align: center;
363 }
364
365 .state-panel p, .empty-state p {
366 max-width: 430px;
367 margin: 0;
368 color: var(--muted);
369 }
370
371 .state-error {
372 color: #b9232e;
373 }
374
375 .empty-state {
376 border: 1px dashed #b7c3d5;
377 border-radius: var(--radius);
378 background: rgba(255, 255, 255, 0.55);
379 }
380
381 .empty-state h3 {
382 margin: 4px 0 0;
383 font-size: 1.7rem;
384 }
385
386 .spin {
387 animation: spin 900ms linear infinite;
388 }
389
390 @keyframes spin {
391 to { transform: rotate(360deg); }
392 }
393
394 .status-pill {
395 display: inline-block;
396 padding: 5px 9px;
397 border-radius: 999px;
398 background: #edf1f6;
399 color: #536078;
400 font-family: "IBM Plex Mono", monospace;
401 font-size: 0.63rem;
402 letter-spacing: 0.08em;
403 text-transform: uppercase;
404 }
405
406 .status-active {
407 background: #d8f6ed;
408 color: #12644f;
409 }
410
411 .status-upcoming {
412 background: var(--blue-pale);
413 color: var(--blue-dark);
414 }
415
416 .avatar {
417 display: inline-grid;
418 flex: 0 0 auto;
419 place-items: center;
420 overflow: hidden;
421 border-radius: 50%;
422 background: var(--mango);
423 color: var(--ink);
424 font-family: "Barlow Condensed", sans-serif;
425 font-weight: 700;
426 }
427
428 .avatar img {
429 width: 100%;
430 height: 100%;
431 object-fit: cover;
432 }
433
434 .avatar-small { width: 34px; height: 34px; font-size: 0.8rem; }
435 .avatar-medium { width: 48px; height: 48px; font-size: 1rem; }
436 .avatar-large { width: 72px; height: 72px; font-size: 1.35rem; }
437
438 /* Landing */
439 .landing-page {
440 min-height: 100vh;
441 overflow: hidden;
442 background:
443 radial-gradient(circle at 75% 15%, rgba(132, 220, 198, 0.28), transparent 23rem),
444 linear-gradient(165deg, #f9fbff 0%, #edf3ff 62%, #fff7e7 100%);
445 }
446
447 .landing-nav, .public-nav {
448 display: flex;
449 width: min(1240px, calc(100% - 48px));
450 align-items: center;
451 justify-content: space-between;
452 margin: 0 auto;
453 padding: 24px 0;
454 }
455
456 .landing-nav > div {
457 display: flex;
458 gap: 8px;
459 }
460
461 .landing-hero {
462 display: grid;
463 width: min(1240px, calc(100% - 48px));
464 min-height: 650px;
465 grid-template-columns: 0.9fr 1.1fr;
466 align-items: center;
467 gap: 60px;
468 margin: 0 auto;
469 padding: 58px 0 90px;
470 }
471
472 .hero-copy h1 {
473 max-width: 650px;
474 margin-bottom: 24px;
475 }
476
477 .hero-copy h1 em {
478 color: var(--blue);
479 font-style: normal;
480 }
481
482 .hero-copy > p {
483 max-width: 610px;
484 margin-bottom: 30px;
485 color: #4e5b73;
486 font-size: 1.05rem;
487 line-height: 1.75;
488 }
489
490 .hero-actions {
491 display: flex;
492 align-items: center;
493 gap: 22px;
494 }
495
496 .hero-ticket {
497 position: relative;
498 min-height: 500px;
499 padding: 28px 30px;
500 overflow: hidden;
501 border: 1px solid rgba(255, 255, 255, 0.35);
502 border-radius: 26px;
503 background: var(--blue);
504 color: white;
505 box-shadow: 0 35px 80px rgba(25, 63, 170, 0.28);
506 transform: rotate(2deg);
507 }
508
509 .hero-ticket::before, .tasteprint-ticket::before, .public-passport::before {
510 position: absolute;
511 inset: 12px;
512 border: 1px dashed rgba(255, 255, 255, 0.36);
513 border-radius: 18px;
514 content: "";
515 pointer-events: none;
516 }
517
518 .ticket-route, .trip-card-route {
519 display: flex;
520 align-items: center;
521 gap: 10px;
522 font-family: "IBM Plex Mono", monospace;
523 font-size: 0.78rem;
524 letter-spacing: 0.1em;
525 }
526
527 .ticket-route i, .trip-card-route i {
528 height: 1px;
529 flex: 1;
530 border-top: 1px dashed currentColor;
531 opacity: 0.55;
532 }
533
534 .ticket-score {
535 display: flex;
536 width: max-content;
537 flex-direction: column;
538 margin-top: 42px;
539 }
540
541 .ticket-score span, .ticket-score small {
542 color: #dce5ff;
543 }
544
545 .ticket-score strong {
546 font-family: "Barlow Condensed", sans-serif;
547 font-size: 5.4rem;
548 line-height: 0.92;
549 }
550
551 .hero-world-map {
552 margin: -65px -20px -35px 80px;
553 }
554
555 .ticket-stamp {
556 position: absolute;
557 right: 42px;
558 bottom: 34px;
559 display: grid;
560 width: 78px;
561 height: 78px;
562 place-items: center;
563 border: 3px double var(--mango);
564 border-radius: 50%;
565 color: var(--mango);
566 font-family: "IBM Plex Mono", monospace;
567 font-size: 0.7rem;
568 line-height: 1.3;
569 text-align: center;
570 transform: rotate(-10deg);
571 }
572
573 .landing-proof {
574 display: grid;
575 width: min(1240px, calc(100% - 48px));
576 grid-template-columns: repeat(3, 1fr);
577 margin: 0 auto 80px;
578 border: 1px solid var(--line);
579 border-radius: 20px;
580 background: rgba(255, 255, 255, 0.82);
581 box-shadow: var(--shadow);
582 }
583
584 .landing-proof article {
585 padding: 30px;
586 }
587
588 .landing-proof article + article {
589 border-left: 1px dashed #c5cede;
590 }
591
592 .landing-proof article > span {
593 display: block;
594 margin: 14px 0 8px;
595 color: var(--blue);
596 font-family: "IBM Plex Mono", monospace;
597 font-size: 0.65rem;
598 letter-spacing: 0.08em;
599 text-transform: uppercase;
600 }
601
602 .landing-proof h2 {
603 margin-bottom: 10px;
604 font-size: 1.75rem;
605 }
606
607 .landing-proof p {
608 margin: 0;
609 color: var(--muted);
610 font-size: 0.9rem;
611 line-height: 1.65;
612 }
613
614 /* Authentication */
615 .auth-page {
616 display: grid;
617 min-height: 100vh;
618 grid-template-columns: minmax(380px, 0.9fr) minmax(500px, 1.1fr);
619 }
620
621 .auth-story {
622 display: flex;
623 flex-direction: column;
624 justify-content: space-between;
625 padding: 44px 9vw 44px 54px;
626 overflow: hidden;
627 background: var(--blue);
628 color: white;
629 }
630
631 .auth-story .brand, .auth-story h1 {
632 color: white;
633 }
634
635 .auth-story .brand-mark, .auth-story .brand-word strong:last-child {
636 color: var(--mango);
637 }
638
639 .auth-story h1 {
640 margin: 0;
641 font-size: clamp(3rem, 5.5vw, 5.8rem);
642 }
643
644 .auth-story > p {
645 margin: 0;
646 color: #dce5ff;
647 font-size: 0.86rem;
648 }
649
650 .auth-stamps {
651 position: relative;
652 height: 160px;
653 margin-top: 25px;
654 }
655
656 .auth-stamp {
657 position: absolute;
658 display: grid;
659 width: 105px;
660 height: 105px;
661 place-items: center;
662 border: 3px double currentColor;
663 border-radius: 50%;
664 font-family: "Barlow Condensed", sans-serif;
665 font-size: 2.2rem;
666 line-height: 0.8;
667 text-align: center;
668 }
669
670 .auth-stamp small {
671 display: block;
672 font-family: "IBM Plex Mono", monospace;
673 font-size: 0.6rem;
674 }
675
676 .auth-stamp-jp { left: 0; color: var(--mango); transform: rotate(-12deg); }
677 .auth-stamp-pt { left: 90px; top: 30px; color: var(--mint); transform: rotate(8deg); }
678 .auth-stamp-mx { left: 190px; top: -8px; color: #ffc3be; transform: rotate(-3deg); }
679
680 .auth-panel {
681 display: flex;
682 flex-direction: column;
683 padding: 38px 54px;
684 background: white;
685 }
686
687 .auth-form-wrap {
688 width: min(430px, 100%);
689 margin: auto;
690 }
691
692 .auth-seal {
693 display: grid;
694 width: 54px;
695 height: 54px;
696 place-items: center;
697 margin-bottom: 24px;
698 border-radius: 50%;
699 background: var(--blue-pale);
700 color: var(--blue);
701 }
702
703 .auth-form-wrap h2 {
704 margin-bottom: 28px;
705 font-size: 2.5rem;
706 }
707
708 .auth-form, .dialog-form, .profile-form {
709 display: flex;
710 flex-direction: column;
711 gap: 18px;
712 }
713
714 .auth-form-wrap > .button-outline {
715 margin-top: 12px;
716 }
717
718 .auth-switch {
719 margin: 24px 0 0;
720 color: var(--muted);
721 font-size: 0.88rem;
722 text-align: center;
723 }
724
725 .auth-switch a {
726 color: var(--blue);
727 font-weight: 700;
728 }
729
730 label > span, fieldset legend {
731 display: block;
732 margin-bottom: 7px;
733 color: #44516a;
734 font-size: 0.78rem;
735 font-weight: 700;
736 }
737
738 input, select, textarea {
739 width: 100%;
740 border: 1px solid #c8d1df;
741 border-radius: 9px;
742 background: white;
743 color: var(--ink);
744 }
745
746 input, select {
747 height: 45px;
748 padding: 0 12px;
749 }
750
751 textarea {
752 padding: 11px 12px;
753 line-height: 1.55;
754 resize: vertical;
755 }
756
757 input:focus, select:focus, textarea:focus {
758 border-color: var(--blue);
759 outline: 3px solid rgba(33, 85, 245, 0.12);
760 }
761
762 .form-error {
763 margin: 0;
764 color: #b9232e;
765 font-size: 0.82rem;
766 line-height: 1.5;
767 }
768
769 .form-hint, label small {
770 display: block;
771 margin: 6px 0 0;
772 color: var(--muted);
773 font-size: 0.74rem;
774 line-height: 1.5;
775 }
776
777 .form-grid {
778 display: grid;
779 gap: 14px;
780 }
781
782 .form-grid-two {
783 grid-template-columns: repeat(2, minmax(0, 1fr));
784 }
785
786 /* App frame */
787 .app-frame {
788 min-height: 100vh;
789 }
790
791 .sidebar {
792 position: fixed;
793 z-index: 30;
794 inset: 0 auto 0 0;
795 display: flex;
796 width: 235px;
797 flex-direction: column;
798 padding: 28px 20px 22px;
799 border-right: 1px solid #233657;
800 background: var(--ink);
801 color: white;
802 }
803
804 .sidebar .brand {
805 margin-left: 4px;
806 color: white;
807 }
808
809 .sidebar .brand-mark, .sidebar .brand-word strong:last-child {
810 color: var(--mango);
811 }
812
813 .quick-stamp-button {
814 margin: 34px 0 25px;
815 background: var(--mango);
816 color: var(--ink);
817 }
818
819 .side-nav {
820 display: flex;
821 flex-direction: column;
822 gap: 4px;
823 }
824
825 .side-nav a {
826 display: flex;
827 align-items: center;
828 gap: 12px;
829 padding: 11px 12px;
830 border-radius: 9px;
831 color: #b9c7de;
832 font-size: 0.88rem;
833 font-weight: 600;
834 }
835
836 .side-nav a:hover, .side-nav a.active {
837 background: #223454;
838 color: white;
839 }
840
841 .side-nav a.active svg {
842 color: var(--mango);
843 }
844
845 .sidebar-account {
846 display: flex;
847 align-items: center;
848 gap: 5px;
849 margin-top: auto;
850 padding-top: 18px;
851 border-top: 1px solid #304260;
852 }
853
854 .account-link {
855 display: flex;
856 min-width: 0;
857 flex: 1;
858 align-items: center;
859 gap: 9px;
860 padding: 4px;
861 border: 0;
862 background: transparent;
863 color: white;
864 text-align: left;
865 }
866
867 .account-link > span:not(.avatar) {
868 display: flex;
869 min-width: 0;
870 flex: 1;
871 flex-direction: column;
872 }
873
874 .account-link strong {
875 overflow: hidden;
876 font-size: 0.78rem;
877 text-overflow: ellipsis;
878 white-space: nowrap;
879 }
880
881 .account-link small {
882 color: #9cabc1;
883 font-size: 0.66rem;
884 }
885
886 .logout-button {
887 display: grid;
888 width: 34px;
889 height: 34px;
890 place-items: center;
891 border: 0;
892 background: transparent;
893 color: #9cabc1;
894 }
895
896 .app-main {
897 min-height: 100vh;
898 margin-left: 235px;
899 }
900
901 .mobile-header, .mobile-nav {
902 display: none;
903 }
904
905 /* Maps and rings */
906 .world-map svg {
907 display: block;
908 width: 100%;
909 height: auto;
910 }
911
912 .map-country {
913 fill: #dce4f0;
914 stroke: rgba(255, 255, 255, 0.85);
915 stroke-width: 0.7;
916 transition: opacity 140ms ease, filter 140ms ease;
917 }
918
919 .map-country-tracked {
920 cursor: pointer;
921 }
922
923 .map-country-tracked:hover, .map-country-tracked:focus {
924 filter: brightness(0.9);
925 }
926
927 .map-pin circle:first-child {
928 fill: white;
929 stroke: var(--ink);
930 stroke-width: 2;
931 }
932
933 .map-pin circle:last-child {
934 fill: var(--ink);
935 }
936
937 .map-legend {
938 display: flex;
939 justify-content: center;
940 gap: 18px;
941 color: var(--muted);
942 font-size: 0.65rem;
943 }
944
945 .map-legend span {
946 display: flex;
947 align-items: center;
948 gap: 5px;
949 }
950
951 .map-legend i {
952 display: inline-block;
953 width: 9px;
954 height: 9px;
955 border-radius: 2px;
956 background: #dce4f0;
957 }
958
959 .map-legend .legend-started { background: #93acef; }
960 .map-legend .legend-deep { background: var(--blue); }
961
962 .hero-ticket .map-country, .tasteprint-ticket .map-country, .public-passport .map-country {
963 fill: rgba(255, 255, 255, 0.18);
964 stroke: rgba(255, 255, 255, 0.35);
965 }
966
967 .hero-ticket .map-legend, .tasteprint-ticket .map-legend, .public-passport .map-legend {
968 display: none;
969 }
970
971 .progress-ring {
972 --progress: 0deg;
973 display: grid;
974 flex: 0 0 auto;
975 place-items: center;
976 border-radius: 50%;
977 background: conic-gradient(var(--blue) var(--progress), #e3e8f0 0);
978 }
979
980 .progress-ring::before {
981 grid-area: 1 / 1;
982 width: 75%;
983 height: 75%;
984 border-radius: 50%;
985 background: white;
986 content: "";
987 }
988
989 .progress-ring > div {
990 z-index: 1;
991 display: flex;
992 grid-area: 1 / 1;
993 align-items: baseline;
994 }
995
996 .progress-ring strong {
997 font-family: "Barlow Condensed", sans-serif;
998 line-height: 1;
999 }
1000
1001 .progress-ring span {
1002 color: var(--muted);
1003 font-size: 0.58em;
1004 }
1005
1006 .progress-ring-small { width: 58px; height: 58px; }
1007 .progress-ring-small strong { font-size: 1.35rem; }
1008 .progress-ring-medium { width: 82px; height: 82px; }
1009 .progress-ring-medium strong { font-size: 1.9rem; }
1010 .progress-ring-large { width: 126px; height: 126px; }
1011 .progress-ring-large strong { font-size: 2.8rem; }
1012 .progress-ring-light { background: conic-gradient(var(--mango) var(--progress), rgba(255, 255, 255, 0.2) 0); }
1013 .progress-ring-light::before { background: rgba(20, 33, 61, 0.92); }
1014 .progress-ring-light strong, .progress-ring-light span { color: white; }
1015
1016 /* Dashboard */
1017 .tasteprint-ticket {
1018 position: relative;
1019 min-height: 390px;
1020 padding: 30px 34px 26px;
1021 overflow: hidden;
1022 border-radius: 22px;
1023 background: var(--blue);
1024 color: white;
1025 box-shadow: 0 24px 60px rgba(33, 85, 245, 0.23);
1026 }
1027
1028 .ticket-heading {
1029 position: relative;
1030 z-index: 2;
1031 display: flex;
1032 align-items: flex-start;
1033 justify-content: space-between;
1034 gap: 20px;
1035 }
1036
1037 .ticket-heading h2 {
1038 max-width: 530px;
1039 margin: 0;
1040 color: white;
1041 font-size: clamp(2.1rem, 4vw, 3.3rem);
1042 }
1043
1044 .ticket-code {
1045 display: block;
1046 margin-bottom: 18px;
1047 color: #b9cbff;
1048 font-family: "IBM Plex Mono", monospace;
1049 font-size: 0.66rem;
1050 letter-spacing: 0.1em;
1051 }
1052
1053 .ticket-share {
1054 display: inline-flex;
1055 align-items: center;
1056 gap: 7px;
1057 padding: 9px 12px;
1058 border: 1px solid rgba(255, 255, 255, 0.34);
1059 border-radius: 9px;
1060 font-size: 0.76rem;
1061 font-weight: 700;
1062 }
1063
1064 .dashboard-map {
1065 position: absolute;
1066 z-index: 1;
1067 right: -40px;
1068 bottom: -64px;
1069 width: min(680px, 62%);
1070 opacity: 0.88;
1071 }
1072
1073 .ticket-stats {
1074 position: absolute;
1075 z-index: 2;
1076 bottom: 26px;
1077 left: 34px;
1078 display: flex;
1079 gap: 32px;
1080 }
1081
1082 .ticket-stats div {
1083 display: flex;
1084 flex-direction: column;
1085 }
1086
1087 .ticket-stats strong {
1088 font-family: "Barlow Condensed", sans-serif;
1089 font-size: 1.8rem;
1090 line-height: 1;
1091 }
1092
1093 .ticket-stats span {
1094 color: #c9d6fa;
1095 font-size: 0.65rem;
1096 }
1097
1098 .ticket-notch {
1099 position: absolute;
1100 right: 25%;
1101 width: 26px;
1102 height: 26px;
1103 border-radius: 50%;
1104 background: var(--canvas);
1105 }
1106
1107 .ticket-notch-top { top: -13px; }
1108 .ticket-notch-bottom { bottom: -13px; }
1109
1110 .dashboard-grid {
1111 display: grid;
1112 grid-template-columns: 1.3fr 0.7fr;
1113 gap: 22px;
1114 margin-top: 24px;
1115 }
1116
1117 .trip-meta-row {
1118 display: flex;
1119 justify-content: space-between;
1120 gap: 12px;
1121 margin: -5px 0 18px;
1122 color: var(--muted);
1123 font-size: 0.72rem;
1124 }
1125
1126 .trip-meta-row span {
1127 display: inline-flex;
1128 align-items: center;
1129 gap: 6px;
1130 }
1131
1132 .mission-list {
1133 display: flex;
1134 flex-direction: column;
1135 gap: 2px;
1136 margin: 0;
1137 padding: 0;
1138 list-style: none;
1139 }
1140
1141 .mission-list li {
1142 display: flex;
1143 align-items: center;
1144 gap: 11px;
1145 padding: 10px 0;
1146 border-top: 1px solid #edf0f5;
1147 }
1148
1149 .mission-number, .check-mark {
1150 display: grid;
1151 width: 26px;
1152 height: 26px;
1153 flex: 0 0 26px;
1154 place-items: center;
1155 border: 1px solid #c8d2e2;
1156 border-radius: 50%;
1157 color: var(--blue);
1158 font-family: "IBM Plex Mono", monospace;
1159 font-size: 0.64rem;
1160 }
1161
1162 .mission-list li > span:nth-child(2) {
1163 display: flex;
1164 flex: 1;
1165 flex-direction: column;
1166 }
1167
1168 .mission-list strong { font-size: 0.84rem; }
1169 .mission-list small { color: var(--muted); font-size: 0.66rem; }
1170 .mission-list button { border: 0; background: transparent; color: var(--blue); font-size: 0.73rem; font-weight: 700; }
1171 .mission-complete { opacity: 0.62; }
1172 .mission-complete strong { text-decoration: line-through; }
1173
1174 .panel-link {
1175 margin-top: 18px;
1176 font-size: 0.78rem;
1177 }
1178
1179 .coverage-list {
1180 display: flex;
1181 flex-direction: column;
1182 }
1183
1184 .coverage-list a {
1185 display: flex;
1186 align-items: center;
1187 gap: 12px;
1188 padding: 10px 0;
1189 border-top: 1px solid #edf0f5;
1190 }
1191
1192 .coverage-list a > span:not(.progress-ring) {
1193 display: flex;
1194 flex: 1;
1195 flex-direction: column;
1196 }
1197
1198 .coverage-list strong { font-size: 0.82rem; }
1199 .coverage-list small { color: var(--muted); font-size: 0.66rem; }
1200
1201 .compact-empty {
1202 display: flex;
1203 min-height: 170px;
1204 flex-direction: column;
1205 align-items: flex-start;
1206 justify-content: center;
1207 gap: 12px;
1208 color: var(--muted);
1209 }
1210
1211 .compact-empty p {
1212 max-width: 400px;
1213 margin: 0;
1214 font-size: 0.86rem;
1215 line-height: 1.6;
1216 }
1217
1218 .dashboard-section {
1219 margin-top: 48px;
1220 }
1221
1222 .dish-grid {
1223 display: grid;
1224 gap: 18px;
1225 }
1226
1227 .dish-grid-two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1228 .dish-grid-three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
1229
1230 .dish-card {
1231 overflow: hidden;
1232 border: 1px solid var(--line);
1233 border-radius: 15px;
1234 background: white;
1235 transition: transform 160ms ease, box-shadow 160ms ease;
1236 }
1237
1238 .dish-card:hover {
1239 transform: translateY(-2px);
1240 box-shadow: 0 12px 30px rgba(20, 33, 61, 0.08);
1241 }
1242
1243 .dish-card-band {
1244 display: flex;
1245 align-items: center;
1246 justify-content: space-between;
1247 padding: 9px 14px;
1248 color: white;
1249 font-family: "IBM Plex Mono", monospace;
1250 font-size: 0.6rem;
1251 letter-spacing: 0.08em;
1252 text-transform: uppercase;
1253 }
1254
1255 .dish-card-body {
1256 padding: 18px;
1257 }
1258
1259 .dish-card-title {
1260 display: flex;
1261 justify-content: space-between;
1262 gap: 12px;
1263 }
1264
1265 .dish-card-title h3 {
1266 margin-bottom: 2px;
1267 font-size: 1.6rem;
1268 }
1269
1270 .dish-card-title p, .dish-description {
1271 color: var(--muted);
1272 }
1273
1274 .dish-card-title p {
1275 margin-bottom: 10px;
1276 font-size: 0.72rem;
1277 }
1278
1279 .dish-description {
1280 min-height: 58px;
1281 margin-bottom: 14px;
1282 font-size: 0.82rem;
1283 line-height: 1.55;
1284 }
1285
1286 .tried-seal {
1287 display: grid;
1288 width: 30px;
1289 height: 30px;
1290 place-items: center;
1291 border-radius: 50%;
1292 background: #d8f6ed;
1293 color: #12644f;
1294 }
1295
1296 .dish-meta {
1297 display: flex;
1298 flex-wrap: wrap;
1299 gap: 7px;
1300 }
1301
1302 .dish-meta span {
1303 display: inline-flex;
1304 align-items: center;
1305 gap: 4px;
1306 padding: 4px 7px;
1307 border-radius: 6px;
1308 background: #f1f4f8;
1309 color: #5d687d;
1310 font-size: 0.61rem;
1311 }
1312
1313 .text-button {
1314 display: inline-flex;
1315 align-items: center;
1316 gap: 5px;
1317 margin-top: 15px;
1318 padding: 0;
1319 border: 0;
1320 background: transparent;
1321 color: var(--blue);
1322 font-size: 0.72rem;
1323 font-weight: 700;
1324 }
1325
1326 .dish-card-tried {
1327 background: #f9fbfb;
1328 }
1329
1330 .recent-tastings {
1331 display: grid;
1332 grid-template-columns: repeat(2, minmax(0, 1fr));
1333 gap: 12px;
1334 }
1335
1336 .recent-tastings article {
1337 display: flex;
1338 align-items: center;
1339 gap: 11px;
1340 padding: 10px;
1341 border: 1px solid var(--line);
1342 border-radius: 12px;
1343 background: white;
1344 }
1345
1346 .recent-photo {
1347 display: grid;
1348 width: 54px;
1349 height: 54px;
1350 flex: 0 0 54px;
1351 place-items: center;
1352 overflow: hidden;
1353 border-radius: 9px;
1354 color: white;
1355 font-family: "IBM Plex Mono", monospace;
1356 font-size: 0.7rem;
1357 }
1358
1359 .recent-photo img { width: 100%; height: 100%; object-fit: cover; }
1360 .recent-tastings article > div:nth-child(2) { display: flex; min-width: 0; flex: 1; flex-direction: column; }
1361 .recent-tastings strong { font-size: 0.8rem; }
1362 .recent-tastings span { display: flex; align-items: center; gap: 3px; color: var(--muted); font-size: 0.66rem; }
1363 .recent-tastings time { color: var(--muted); font-size: 0.66rem; }
1364
1365 /* Explore and destinations */
1366 .atlas-map-panel {
1367 position: relative;
1368 min-height: 380px;
1369 padding: 18px 28px;
1370 overflow: hidden;
1371 border-radius: 20px;
1372 background: #eaf0fb;
1373 }
1374
1375 .atlas-map-panel .world-map {
1376 width: min(780px, 78%);
1377 margin: 0 auto;
1378 }
1379
1380 .atlas-map-copy {
1381 position: absolute;
1382 top: 27px;
1383 left: 30px;
1384 padding: 15px 17px;
1385 border: 1px solid rgba(255, 255, 255, 0.8);
1386 border-radius: 12px;
1387 background: rgba(255, 255, 255, 0.82);
1388 box-shadow: 0 10px 28px rgba(20, 33, 61, 0.08);
1389 backdrop-filter: blur(10px);
1390 }
1391
1392 .atlas-map-copy strong {
1393 display: block;
1394 font-family: "Barlow Condensed", sans-serif;
1395 font-size: 2.2rem;
1396 }
1397
1398 .atlas-map-copy p {
1399 margin: 0;
1400 color: var(--muted);
1401 font-size: 0.7rem;
1402 }
1403
1404 .filter-bar, .journal-toolbar {
1405 display: flex;
1406 align-items: center;
1407 justify-content: space-between;
1408 gap: 18px;
1409 margin: 28px 0 22px;
1410 }
1411
1412 .search-field {
1413 position: relative;
1414 display: flex;
1415 width: min(360px, 100%);
1416 align-items: center;
1417 }
1418
1419 .search-field svg {
1420 position: absolute;
1421 left: 13px;
1422 color: var(--muted);
1423 }
1424
1425 .search-field input {
1426 padding-left: 40px;
1427 }
1428
1429 .filter-chips {
1430 display: flex;
1431 flex-wrap: wrap;
1432 justify-content: flex-end;
1433 gap: 6px;
1434 }
1435
1436 .filter-chips button {
1437 padding: 7px 11px;
1438 border: 1px solid var(--line);
1439 border-radius: 999px;
1440 background: white;
1441 color: var(--muted);
1442 font-size: 0.68rem;
1443 font-weight: 700;
1444 }
1445
1446 .filter-chips button.active {
1447 border-color: var(--blue);
1448 background: var(--blue);
1449 color: white;
1450 }
1451
1452 .destination-grid {
1453 display: grid;
1454 grid-template-columns: repeat(3, minmax(0, 1fr));
1455 gap: 18px;
1456 }
1457
1458 .destination-card {
1459 overflow: hidden;
1460 border: 1px solid var(--line);
1461 border-radius: 17px;
1462 background: white;
1463 transition: transform 160ms ease, box-shadow 160ms ease;
1464 }
1465
1466 .destination-card:hover {
1467 transform: translateY(-3px);
1468 box-shadow: var(--shadow);
1469 }
1470
1471 .destination-card-top {
1472 position: relative;
1473 display: flex;
1474 min-height: 125px;
1475 align-items: flex-start;
1476 justify-content: space-between;
1477 padding: 18px;
1478 overflow: hidden;
1479 color: white;
1480 }
1481
1482 .destination-code {
1483 font-family: "Barlow Condensed", sans-serif;
1484 font-size: 3.4rem;
1485 font-weight: 700;
1486 line-height: 1;
1487 }
1488
1489 .destination-local {
1490 position: relative;
1491 z-index: 1;
1492 font-family: "IBM Plex Mono", monospace;
1493 font-size: 0.63rem;
1494 }
1495
1496 .destination-contours {
1497 position: absolute;
1498 right: -22px;
1499 bottom: -35px;
1500 width: 155px;
1501 height: 105px;
1502 border: 1px solid rgba(255, 255, 255, 0.28);
1503 border-radius: 52% 48% 41% 59%;
1504 box-shadow: 0 0 0 15px rgba(255, 255, 255, 0.08), 0 0 0 30px rgba(255, 255, 255, 0.06);
1505 transform: rotate(-13deg);
1506 }
1507
1508 .destination-card-body {
1509 display: grid;
1510 grid-template-columns: 1fr auto;
1511 gap: 14px;
1512 padding: 19px;
1513 }
1514
1515 .destination-card-body h2 {
1516 margin: 0;
1517 }
1518
1519 .destination-card-body > p {
1520 grid-column: 1 / -1;
1521 min-height: 62px;
1522 margin: 0;
1523 color: var(--muted);
1524 font-size: 0.77rem;
1525 line-height: 1.55;
1526 }
1527
1528 .destination-card-body footer {
1529 display: flex;
1530 grid-column: 1 / -1;
1531 align-items: center;
1532 justify-content: space-between;
1533 padding-top: 12px;
1534 border-top: 1px solid #edf0f5;
1535 color: var(--muted);
1536 font-size: 0.69rem;
1537 }
1538
1539 .destination-hero {
1540 --destination-accent: var(--blue);
1541 position: relative;
1542 display: grid;
1543 min-height: 340px;
1544 grid-template-columns: 160px 1fr 180px;
1545 align-items: center;
1546 gap: 25px;
1547 padding: 35px;
1548 overflow: hidden;
1549 border-radius: 22px;
1550 background: var(--destination-accent);
1551 color: white;
1552 }
1553
1554 .destination-hero h1 {
1555 margin: 0;
1556 color: white;
1557 }
1558
1559 .destination-hero-main > p:not(.destination-local-name) {
1560 max-width: 560px;
1561 color: rgba(255, 255, 255, 0.82);
1562 line-height: 1.6;
1563 }
1564
1565 .destination-local-name {
1566 margin: 5px 0 16px;
1567 color: white;
1568 font-family: "IBM Plex Mono", monospace;
1569 font-size: 0.76rem;
1570 }
1571
1572 .destination-hero-code {
1573 color: rgba(255, 255, 255, 0.16);
1574 font-family: "Barlow Condensed", sans-serif;
1575 font-size: 8.5rem;
1576 font-weight: 700;
1577 transform: rotate(-90deg);
1578 }
1579
1580 .destination-coverage-block {
1581 position: relative;
1582 z-index: 1;
1583 display: flex;
1584 flex-direction: column;
1585 align-items: center;
1586 gap: 10px;
1587 font-size: 0.7rem;
1588 text-align: center;
1589 }
1590
1591 .destination-hero .progress-ring::before {
1592 background: var(--destination-accent);
1593 }
1594
1595 .destination-hero .progress-ring strong, .destination-hero .progress-ring span {
1596 color: white;
1597 }
1598
1599 .destination-stamp-outline {
1600 position: absolute;
1601 right: -65px;
1602 bottom: -90px;
1603 width: 290px;
1604 height: 290px;
1605 border: 3px double rgba(255, 255, 255, 0.13);
1606 border-radius: 50%;
1607 }
1608
1609 .culture-note {
1610 display: flex;
1611 gap: 14px;
1612 margin: 18px 0 44px;
1613 padding: 17px 20px;
1614 border: 1px solid #d8e3fb;
1615 border-radius: 12px;
1616 background: #eef3ff;
1617 color: var(--blue-dark);
1618 }
1619
1620 .culture-note p {
1621 margin: 3px 0 0;
1622 color: #58667f;
1623 font-size: 0.76rem;
1624 line-height: 1.55;
1625 }
1626
1627 /* Journal */
1628 .journal-toolbar > span {
1629 color: var(--muted);
1630 font-family: "IBM Plex Mono", monospace;
1631 font-size: 0.66rem;
1632 }
1633
1634 .journal-list {
1635 display: flex;
1636 flex-direction: column;
1637 gap: 12px;
1638 }
1639
1640 .journal-entry {
1641 display: grid;
1642 grid-template-columns: 132px 1fr auto;
1643 gap: 18px;
1644 min-height: 148px;
1645 padding: 11px;
1646 border: 1px solid var(--line);
1647 border-radius: 15px;
1648 background: white;
1649 }
1650
1651 .journal-image {
1652 display: grid;
1653 min-height: 126px;
1654 place-items: center;
1655 overflow: hidden;
1656 border-radius: 10px;
1657 color: white;
1658 font-family: "Barlow Condensed", sans-serif;
1659 font-size: 2.5rem;
1660 font-weight: 700;
1661 }
1662
1663 .journal-image img {
1664 width: 100%;
1665 height: 100%;
1666 object-fit: cover;
1667 }
1668
1669 .journal-main {
1670 padding: 11px 0;
1671 }
1672
1673 .journal-title-row, .journal-place {
1674 display: flex;
1675 align-items: center;
1676 justify-content: space-between;
1677 gap: 15px;
1678 }
1679
1680 .journal-title-row h2 {
1681 margin-bottom: 7px;
1682 }
1683
1684 .journal-rating {
1685 display: inline-flex;
1686 align-items: center;
1687 gap: 4px;
1688 padding: 6px 9px;
1689 border-radius: 8px;
1690 background: #fff5d5;
1691 color: #8a5a00;
1692 font-size: 0.7rem;
1693 font-weight: 700;
1694 }
1695
1696 .journal-place {
1697 justify-content: flex-start;
1698 color: var(--muted);
1699 font-size: 0.7rem;
1700 }
1701
1702 .journal-place time {
1703 margin-left: auto;
1704 }
1705
1706 .journal-main blockquote {
1707 margin: 14px 0 0;
1708 padding-left: 12px;
1709 border-left: 2px solid var(--blue);
1710 color: #47536a;
1711 font-size: 0.8rem;
1712 font-style: italic;
1713 line-height: 1.55;
1714 }
1715
1716 .journal-actions {
1717 display: flex;
1718 gap: 7px;
1719 padding: 8px 5px;
1720 }
1721
1722 /* Trips */
1723 .trip-list {
1724 display: grid;
1725 grid-template-columns: repeat(2, minmax(0, 1fr));
1726 gap: 20px;
1727 }
1728
1729 .trip-card {
1730 --destination-accent: var(--blue);
1731 overflow: hidden;
1732 border: 1px solid var(--line);
1733 border-top: 7px solid var(--destination-accent);
1734 border-radius: 16px;
1735 background: white;
1736 transition: transform 160ms ease, box-shadow 160ms ease;
1737 }
1738
1739 .trip-card:hover {
1740 transform: translateY(-3px);
1741 box-shadow: var(--shadow);
1742 }
1743
1744 .trip-card-route {
1745 padding: 15px 20px 8px;
1746 color: var(--muted);
1747 }
1748
1749 .trip-card-main {
1750 display: flex;
1751 align-items: center;
1752 justify-content: space-between;
1753 gap: 16px;
1754 padding: 16px 20px;
1755 }
1756
1757 .trip-card-main h2 {
1758 margin: 8px 0 2px;
1759 font-size: 2.15rem;
1760 }
1761
1762 .trip-card-main p {
1763 margin: 0;
1764 color: var(--muted);
1765 font-size: 0.78rem;
1766 }
1767
1768 .trip-card-meta {
1769 display: flex;
1770 flex-wrap: wrap;
1771 gap: 14px;
1772 padding: 0 20px 16px;
1773 color: var(--muted);
1774 font-size: 0.68rem;
1775 }
1776
1777 .trip-card-meta span, .trip-card footer span {
1778 display: inline-flex;
1779 align-items: center;
1780 gap: 5px;
1781 }
1782
1783 .trip-card footer {
1784 display: flex;
1785 align-items: center;
1786 justify-content: space-between;
1787 padding: 13px 20px;
1788 border-top: 1px dashed var(--line);
1789 color: var(--blue);
1790 font-size: 0.73rem;
1791 font-weight: 700;
1792 }
1793
1794 .trip-detail-hero {
1795 --destination-accent: var(--blue);
1796 position: relative;
1797 display: flex;
1798 align-items: center;
1799 justify-content: space-between;
1800 gap: 30px;
1801 padding: 35px;
1802 border-radius: 20px;
1803 background: var(--destination-accent);
1804 color: white;
1805 }
1806
1807 .trip-detail-labels {
1808 display: flex;
1809 align-items: center;
1810 gap: 9px;
1811 }
1812
1813 .trip-detail-labels > span:last-child {
1814 font-family: "IBM Plex Mono", monospace;
1815 font-size: 0.7rem;
1816 }
1817
1818 .trip-detail-hero h1 {
1819 margin: 14px 0 0;
1820 color: white;
1821 }
1822
1823 .trip-detail-hero > div:first-child > p {
1824 margin: 0 0 18px;
1825 color: rgba(255, 255, 255, 0.76);
1826 }
1827
1828 .trip-detail-dates {
1829 display: inline-flex;
1830 align-items: center;
1831 gap: 6px;
1832 font-size: 0.75rem;
1833 }
1834
1835 .trip-detail-score {
1836 display: flex;
1837 flex-direction: column;
1838 align-items: center;
1839 gap: 8px;
1840 font-size: 0.65rem;
1841 }
1842
1843 .trip-detail-score .progress-ring::before { background: var(--destination-accent); }
1844 .trip-detail-score .progress-ring strong, .trip-detail-score .progress-ring span { color: white; }
1845
1846 .trip-detail-actions {
1847 position: absolute;
1848 top: 18px;
1849 right: 18px;
1850 display: flex;
1851 gap: 6px;
1852 }
1853
1854 .trip-detail-actions .icon-button {
1855 border-color: rgba(255, 255, 255, 0.3);
1856 background: rgba(255, 255, 255, 0.12);
1857 color: white;
1858 }
1859
1860 .mission-sheet {
1861 margin-top: 22px;
1862 padding: 28px 30px;
1863 border: 1px solid var(--line);
1864 border-radius: 18px;
1865 background: white;
1866 }
1867
1868 .mission-sheet > header {
1869 display: flex;
1870 align-items: flex-end;
1871 justify-content: space-between;
1872 gap: 18px;
1873 margin-bottom: 20px;
1874 }
1875
1876 .mission-sheet h2 { margin: 0; }
1877 .mission-route { display: inline-flex; align-items: center; gap: 5px; color: var(--muted); font-size: 0.68rem; }
1878 .mission-sheet ol { margin: 0; padding: 0; list-style: none; }
1879
1880 .mission-sheet li {
1881 display: grid;
1882 grid-template-columns: 48px 1fr auto;
1883 align-items: center;
1884 gap: 18px;
1885 padding: 19px 0;
1886 border-top: 1px dashed #cdd6e3;
1887 }
1888
1889 .mission-sequence {
1890 display: grid;
1891 width: 42px;
1892 height: 42px;
1893 place-items: center;
1894 border: 1px solid #b7c3d4;
1895 border-radius: 50%;
1896 color: var(--blue);
1897 font-family: "IBM Plex Mono", monospace;
1898 font-size: 0.7rem;
1899 }
1900
1901 .mission-dish-copy > span {
1902 color: var(--blue);
1903 font-family: "IBM Plex Mono", monospace;
1904 font-size: 0.59rem;
1905 letter-spacing: 0.08em;
1906 text-transform: uppercase;
1907 }
1908
1909 .mission-dish-copy h3 { margin: 4px 0 6px; font-size: 1.5rem; }
1910 .mission-dish-copy p { margin: 0 0 5px; color: #4f5b71; font-size: 0.78rem; line-height: 1.5; }
1911 .mission-dish-copy small { color: var(--muted); font-size: 0.68rem; }
1912 .mission-done { color: #12644f; font-size: 0.72rem; font-weight: 700; }
1913
1914 /* Dialogs */
1915 .dialog-backdrop {
1916 position: fixed;
1917 z-index: 100;
1918 inset: 0;
1919 display: grid;
1920 place-items: center;
1921 padding: 20px;
1922 overflow-y: auto;
1923 background: rgba(13, 25, 48, 0.68);
1924 backdrop-filter: blur(5px);
1925 }
1926
1927 .taste-dialog, .small-dialog {
1928 width: min(660px, 100%);
1929 max-height: calc(100vh - 40px);
1930 overflow-y: auto;
1931 border-radius: 18px;
1932 background: white;
1933 box-shadow: 0 30px 90px rgba(6, 15, 34, 0.34);
1934 }
1935
1936 .small-dialog { width: min(520px, 100%); }
1937
1938 .dialog-header {
1939 position: sticky;
1940 z-index: 2;
1941 top: 0;
1942 display: flex;
1943 align-items: flex-start;
1944 justify-content: space-between;
1945 gap: 20px;
1946 padding: 22px 24px 16px;
1947 border-bottom: 1px solid var(--line);
1948 background: white;
1949 }
1950
1951 .dialog-header h2 { margin: 0; }
1952 .dialog-form { padding: 22px 24px 24px; }
1953 .dialog-actions { display: flex; justify-content: flex-end; gap: 9px; padding-top: 5px; }
1954
1955 .rating-field {
1956 margin: 0;
1957 padding: 0;
1958 border: 0;
1959 }
1960
1961 .rating-options {
1962 display: grid;
1963 grid-template-columns: repeat(5, 1fr);
1964 gap: 7px;
1965 }
1966
1967 .rating-options button {
1968 height: 40px;
1969 border: 1px solid #c8d1df;
1970 border-radius: 8px;
1971 background: white;
1972 color: var(--muted);
1973 font-family: "IBM Plex Mono", monospace;
1974 font-size: 0.72rem;
1975 }
1976
1977 .rating-options button.rating-active {
1978 border-color: var(--blue);
1979 background: var(--blue);
1980 color: white;
1981 }
1982
1983 .photo-location-row {
1984 display: grid;
1985 grid-template-columns: 1fr 1fr;
1986 gap: 10px;
1987 }
1988
1989 .photo-picker, .location-button {
1990 display: flex;
1991 min-height: 72px;
1992 align-items: center;
1993 justify-content: center;
1994 gap: 9px;
1995 overflow: hidden;
1996 border: 1px dashed #b9c5d8;
1997 border-radius: 10px;
1998 background: #f8fafe;
1999 color: var(--muted);
2000 font-size: 0.72rem;
2001 font-weight: 700;
2002 }
2003
2004 .photo-control {
2005 display: flex;
2006 min-width: 0;
2007 flex-direction: column;
2008 gap: 5px;
2009 }
2010
2011 .photo-control .photo-picker {
2012 flex: 1;
2013 }
2014
2015 .remove-photo-button {
2016 align-self: flex-start;
2017 padding: 2px 0;
2018 border: 0;
2019 background: transparent;
2020 color: #b9232e;
2021 font-size: 0.66rem;
2022 font-weight: 700;
2023 }
2024
2025 .photo-picker {
2026 position: relative;
2027 margin: 0;
2028 cursor: pointer;
2029 }
2030
2031 .photo-picker > span { margin: 0; color: inherit; }
2032 .photo-picker input { position: absolute; width: 1px; height: 1px; opacity: 0; }
2033 .photo-picker img { width: 62px; height: 62px; object-fit: cover; }
2034 .location-set { border-style: solid; border-color: #86cdb9; background: #e7f7f2; color: #12644f; }
2035
2036 /* Challenges */
2037 .join-strip {
2038 display: grid;
2039 grid-template-columns: 1fr auto;
2040 align-items: center;
2041 gap: 14px 24px;
2042 margin-bottom: 28px;
2043 padding: 17px 20px;
2044 border-radius: 13px;
2045 background: var(--ink);
2046 color: white;
2047 }
2048
2049 .join-strip > div, .join-strip form {
2050 display: flex;
2051 align-items: center;
2052 gap: 11px;
2053 }
2054
2055 .join-strip > div span { display: flex; flex-direction: column; }
2056 .join-strip strong { font-size: 0.84rem; }
2057 .join-strip small { color: #aebbd0; font-size: 0.67rem; }
2058 .join-strip form input { width: 130px; border-color: #3c4d6a; background: #223454; color: white; font-family: "IBM Plex Mono", monospace; letter-spacing: 0.13em; text-align: center; text-transform: uppercase; }
2059 .join-strip .button-ink { border: 1px solid #60708b; }
2060 .join-strip .form-error { grid-column: 1 / -1; color: #ffb8b2; }
2061
2062 .challenge-grid {
2063 display: grid;
2064 grid-template-columns: repeat(2, minmax(0, 1fr));
2065 gap: 18px;
2066 }
2067
2068 .challenge-card {
2069 border: 1px solid var(--line);
2070 border-top: 6px solid var(--blue);
2071 border-radius: 16px;
2072 background: white;
2073 transition: transform 160ms ease, box-shadow 160ms ease;
2074 }
2075
2076 .challenge-card:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
2077 .challenge-card-head { display: flex; align-items: center; justify-content: space-between; padding: 15px 18px 0; }
2078 .join-code { color: var(--muted); font-family: "IBM Plex Mono", monospace; font-size: 0.7rem; letter-spacing: 0.1em; }
2079 .challenge-card-body { display: flex; align-items: center; gap: 18px; padding: 18px; }
2080 .challenge-card-body h2 { margin: 0 0 5px; }
2081 .challenge-card-body p { margin: 0; color: var(--muted); font-size: 0.69rem; }
2082 .challenge-card footer { display: flex; align-items: center; justify-content: space-between; padding: 13px 18px; border-top: 1px dashed var(--line); color: var(--muted); font-size: 0.68rem; }
2083 .challenge-card footer span { display: flex; align-items: center; gap: 5px; }
2084
2085 .challenge-hero {
2086 display: flex;
2087 align-items: center;
2088 justify-content: space-between;
2089 gap: 30px;
2090 padding: 30px 36px;
2091 border-radius: 19px;
2092 color: white;
2093 }
2094
2095 .challenge-hero h2 { margin-bottom: 9px; color: white; font-size: 2.5rem; }
2096 .challenge-hero p { max-width: 650px; margin: 0; color: rgba(255, 255, 255, 0.8); font-size: 0.8rem; line-height: 1.6; }
2097
2098 .challenge-layout {
2099 display: grid;
2100 grid-template-columns: 1fr 310px;
2101 gap: 20px;
2102 margin-top: 20px;
2103 }
2104
2105 .challenge-side { display: flex; flex-direction: column; gap: 15px; }
2106 .challenge-dish-list > div { display: grid; grid-template-columns: 28px 1fr auto; align-items: center; gap: 11px; padding: 13px 0; border-top: 1px solid #edf0f5; }
2107 .challenge-dish-list > div > span:nth-child(2) { display: flex; flex-direction: column; }
2108 .challenge-dish-list strong { font-size: 0.8rem; }
2109 .challenge-dish-list small, .challenge-dish-list > div > span:last-child { color: var(--muted); font-size: 0.65rem; }
2110 .challenge-dish-list .is-complete .check-mark { border-color: #7ac9b2; background: #d8f6ed; color: #12644f; }
2111 .challenge-dish-list .is-complete strong { text-decoration: line-through; }
2112 .invite-code { margin: 10px 0 6px; font-family: "IBM Plex Mono", monospace; font-size: 2rem; font-weight: 500; letter-spacing: 0.15em; }
2113 .invite-panel p { color: var(--muted); font-size: 0.75rem; }
2114 .participant-list { display: flex; flex-direction: column; }
2115 .participant-list > div { display: flex; align-items: center; gap: 9px; padding: 10px 0; border-top: 1px solid #edf0f5; }
2116 .participant-list > div > span { display: flex; flex-direction: column; }
2117 .participant-list strong { font-size: 0.77rem; }
2118 .participant-list small { color: var(--muted); font-size: 0.64rem; }
2119 .danger-link { display: inline-flex; align-items: center; align-self: flex-start; gap: 6px; padding: 7px 0; border: 0; background: transparent; font-size: 0.72rem; font-weight: 700; }
2120
2121 /* Profile */
2122 .profile-layout {
2123 display: grid;
2124 grid-template-columns: minmax(0, 1fr) 370px;
2125 gap: 22px;
2126 }
2127
2128 .profile-identity {
2129 display: flex;
2130 align-items: center;
2131 gap: 16px;
2132 padding-bottom: 20px;
2133 border-bottom: 1px solid var(--line);
2134 }
2135
2136 .profile-identity h2 { margin: 0 0 3px; }
2137 .profile-identity p { margin: 0; color: var(--muted); font-size: 0.74rem; }
2138 .privacy-toggle { display: flex; align-items: flex-start; gap: 12px; padding: 14px; border: 1px solid var(--line); border-radius: 11px; background: #f8fafe; cursor: pointer; }
2139 .privacy-toggle input { width: 19px; height: 19px; flex: 0 0 19px; accent-color: var(--blue); }
2140 .privacy-toggle > span { display: flex; flex-direction: column; margin: 0; }
2141 .privacy-toggle small { margin: 3px 0 0; font-weight: 400; }
2142 .profile-form > .button { align-self: flex-start; }
2143 .profile-side { display: flex; flex-direction: column; gap: 18px; }
2144 .share-panel > svg, .compare-start > svg { margin-bottom: 20px; color: var(--blue); }
2145 .share-panel h2, .compare-start h2 { margin-bottom: 9px; }
2146 .share-panel > p, .compare-start > p { color: var(--muted); font-size: 0.76rem; line-height: 1.55; }
2147 .share-panel.is-public { border-color: #90d3c0; background: #f0fbf7; }
2148 .share-url { display: flex; align-items: center; gap: 5px; margin: 17px 0 12px; padding: 8px 9px 8px 12px; border: 1px solid var(--line); border-radius: 9px; background: white; }
2149 .share-url span { min-width: 0; flex: 1; overflow: hidden; color: var(--muted); font-family: "IBM Plex Mono", monospace; font-size: 0.63rem; text-overflow: ellipsis; white-space: nowrap; }
2150 .share-url button { display: grid; width: 31px; height: 31px; place-items: center; border: 0; border-radius: 6px; background: var(--blue-pale); color: var(--blue); }
2151 .share-actions { display: flex; gap: 7px; }
2152 .compare-start form { display: flex; gap: 7px; margin-top: 15px; }
2153 .compare-start form input { min-width: 0; }
2154 .danger-panel { border-color: #efc7ca; }
2155 .danger-panel > svg { margin-bottom: 15px; color: #b9232e; }
2156 .danger-panel h2 { margin-bottom: 9px; }
2157 .danger-panel > p { color: var(--muted); font-size: 0.74rem; line-height: 1.55; }
2158 .danger-panel form { display: flex; flex-direction: column; gap: 10px; }
2159 .danger-panel form > div { display: flex; justify-content: flex-end; gap: 7px; }
2160
2161 /* Public Tasteprint */
2162 .public-page { min-height: 100vh; background: linear-gradient(180deg, #eef3ff 0, #f8faff 520px, var(--canvas) 100%); }
2163 .public-main { width: min(1040px, calc(100% - 40px)); margin: 20px auto 0; padding-bottom: 70px; }
2164 .public-passport { position: relative; min-height: 560px; padding: 36px; overflow: hidden; border-radius: 24px; background: var(--blue); color: white; box-shadow: 0 28px 70px rgba(33, 85, 245, 0.22); }
2165 .public-person { position: relative; z-index: 2; display: flex; align-items: center; gap: 17px; }
2166 .public-person h1 { margin: 0; color: white; font-size: clamp(2.6rem, 5vw, 4.4rem); }
2167 .public-person p { display: flex; align-items: center; gap: 5px; margin: 7px 0 0; color: #dce5ff; font-size: 0.72rem; }
2168 .public-bio { position: relative; z-index: 2; max-width: 570px; margin: 28px 0 0; color: #dce5ff; font-size: 0.86rem; line-height: 1.6; }
2169 .public-map { position: absolute; right: -25px; bottom: -15px; width: 75%; opacity: 0.9; }
2170 .public-stats { right: auto; bottom: 28px; left: 36px; }
2171 .public-section { margin-top: 50px; }
2172 .public-country-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 11px; }
2173 .public-country-list article { display: flex; align-items: center; gap: 10px; padding: 13px; border: 1px solid var(--line); border-radius: 12px; background: white; }
2174 .public-country-list article > span { display: grid; width: 42px; height: 42px; place-items: center; border-radius: 8px; color: white; font-family: "IBM Plex Mono", monospace; font-size: 0.67rem; }
2175 .public-country-list article > div { display: flex; min-width: 0; flex: 1; flex-direction: column; }
2176 .public-country-list strong { font-size: 0.78rem; }
2177 .public-country-list small { color: var(--muted); font-size: 0.62rem; }
2178 .public-country-list b { color: var(--blue); font-family: "Barlow Condensed", sans-serif; font-size: 1.25rem; }
2179 .public-tasting-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 15px; }
2180 .public-tasting-grid article { overflow: hidden; border: 1px solid var(--line); border-radius: 14px; background: white; }
2181 .public-tasting-photo { display: grid; height: 155px; place-items: center; color: white; }
2182 .public-tasting-photo img { width: 100%; height: 100%; object-fit: cover; }
2183 .public-tasting-grid article > div:last-child { padding: 15px; }
2184 .public-tasting-grid article span { color: var(--blue); font-family: "IBM Plex Mono", monospace; font-size: 0.59rem; text-transform: uppercase; }
2185 .public-tasting-grid h3 { margin: 6px 0 5px; }
2186 .public-tasting-grid p { margin: 0; color: var(--muted); font-size: 0.67rem; }
2187 .public-cta { display: flex; align-items: center; justify-content: space-between; gap: 25px; margin-top: 55px; padding: 32px 36px; border-radius: 18px; background: var(--ink); color: white; }
2188 .public-cta h2 { max-width: 650px; margin: 0; color: white; font-size: 2.3rem; }
2189 .public-state, .standalone-state { display: flex; min-height: 100vh; flex-direction: column; align-items: center; justify-content: center; gap: 18px; padding: 25px; }
2190
2191 /* Comparison */
2192 .match-card { display: grid; grid-template-columns: 1fr 190px 1fr; align-items: center; gap: 25px; padding: 28px; border-radius: 18px; background: var(--ink); color: white; }
2193 .match-person { display: flex; flex-direction: column; align-items: center; gap: 5px; text-align: center; }
2194 .match-person strong { margin-top: 6px; }
2195 .match-person > span { color: #9facc1; font-size: 0.67rem; }
2196 .match-score { display: flex; flex-direction: column; align-items: center; padding: 18px; border-right: 1px dashed #52617b; border-left: 1px dashed #52617b; text-align: center; }
2197 .match-score > span { color: var(--mango); font-family: "IBM Plex Mono", monospace; font-size: 0.63rem; text-transform: uppercase; }
2198 .match-score strong { font-family: "Barlow Condensed", sans-serif; font-size: 4rem; line-height: 1; }
2199 .match-score small { color: #aebbd0; font-size: 0.64rem; }
2200 .shared-bite { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 18px; margin-top: 20px; padding: 23px; border: 2px solid var(--mint); border-radius: 16px; background: white; }
2201 .shared-bite-icon { display: grid; width: 56px; height: 56px; place-items: center; border-radius: 50%; background: var(--blue-pale); color: var(--blue); }
2202 .shared-bite h2 { margin: 0 0 6px; }
2203 .shared-bite p { margin: 0 0 6px; color: var(--muted); font-size: 0.76rem; }
2204 .shared-bite small { display: flex; align-items: center; gap: 4px; color: var(--muted); font-size: 0.65rem; }
2205 .compare-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 17px; margin-top: 30px; }
2206 .compare-column { padding: 20px; border: 1px solid var(--line); border-radius: 14px; background: white; }
2207 .compare-column h3 { margin-bottom: 15px; }
2208 .compare-column > a { display: flex; align-items: center; gap: 9px; padding: 9px 0; border-top: 1px solid #edf0f5; }
2209 .compare-column > a > span { display: grid; width: 31px; height: 31px; place-items: center; border-radius: 6px; color: white; font-family: "IBM Plex Mono", monospace; font-size: 0.56rem; }
2210 .compare-column > a strong { flex: 1; font-size: 0.75rem; }
2211 .compare-column > p { color: var(--muted); font-size: 0.73rem; }
2212
2213 .not-found-page { display: flex; min-height: 100vh; flex-direction: column; align-items: center; justify-content: center; padding: 30px; text-align: center; }
2214 .not-found-page h1 { max-width: 700px; }
2215
2216 @media (max-width: 1050px) {
2217 .sidebar { width: 205px; }
2218 .app-main { margin-left: 205px; }
2219 .page { padding-right: 28px; padding-left: 28px; }
2220 .dashboard-grid, .profile-layout { grid-template-columns: 1fr; }
2221 .profile-side { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
2222 .destination-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
2223 .destination-hero { grid-template-columns: 100px 1fr 150px; }
2224 .destination-hero-code { font-size: 6rem; }
2225 .challenge-layout { grid-template-columns: 1fr 280px; }
2226 }
2227
2228 @media (max-width: 820px) {
2229 .sidebar { display: none; }
2230 .app-main { margin: 64px 0 72px; }
2231 .mobile-header { position: fixed; z-index: 30; inset: 0 0 auto; display: flex; height: 64px; align-items: center; justify-content: space-between; padding: 10px 18px; border-bottom: 1px solid var(--line); background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(12px); }
2232 .mobile-nav { position: fixed; z-index: 30; inset: auto 0 0; display: grid; height: 68px; grid-template-columns: repeat(5, 1fr); border-top: 1px solid var(--line); background: rgba(255, 255, 255, 0.97); }
2233 .mobile-nav a { display: flex; min-width: 0; flex-direction: column; align-items: center; justify-content: center; gap: 3px; color: var(--muted); font-size: 0.56rem; }
2234 .mobile-nav a.active { color: var(--blue); }
2235 .page { padding: 32px 20px 50px; }
2236 .landing-hero { grid-template-columns: 1fr; padding-top: 40px; }
2237 .hero-ticket { min-height: 450px; }
2238 .landing-proof { grid-template-columns: 1fr; }
2239 .landing-proof article + article { border-top: 1px dashed #c5cede; border-left: 0; }
2240 .auth-page { grid-template-columns: 1fr; }
2241 .auth-story { display: none; }
2242 .auth-panel { min-height: 100vh; padding: 25px; }
2243 .dashboard-map { width: 74%; }
2244 .dish-grid-three { grid-template-columns: repeat(2, minmax(0, 1fr)); }
2245 .challenge-layout { grid-template-columns: 1fr; }
2246 .challenge-side { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
2247 .challenge-side .danger-link { grid-column: 1 / -1; }
2248 .public-country-list, .public-tasting-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
2249 }
2250
2251 @media (max-width: 620px) {
2252 .landing-nav, .public-nav { width: calc(100% - 30px); padding: 16px 0; }
2253 .landing-nav .button-ghost { display: none; }
2254 .landing-hero { width: calc(100% - 30px); min-height: auto; gap: 38px; padding: 48px 0 55px; }
2255 .hero-copy h1 { font-size: 3.7rem; }
2256 .hero-actions { align-items: flex-start; flex-direction: column; }
2257 .hero-ticket { min-height: 385px; padding: 22px; transform: none; }
2258 .hero-world-map { margin: -25px -40px -30px 10px; width: 120%; }
2259 .ticket-score { margin-top: 27px; }
2260 .ticket-score strong { font-size: 4rem; }
2261 .ticket-stamp { right: 25px; bottom: 25px; }
2262 .landing-proof { width: calc(100% - 30px); margin-bottom: 40px; }
2263 .page-header { align-items: flex-start; flex-direction: column; margin-bottom: 26px; }
2264 .page-header h1 { font-size: 2.8rem; }
2265 .page-header-action, .page-header-action .button { width: 100%; }
2266 .tasteprint-ticket { min-height: 520px; padding: 25px 24px; }
2267 .ticket-heading { flex-direction: column; }
2268 .ticket-heading h2 { font-size: 2.55rem; }
2269 .dashboard-map { right: -55px; bottom: 70px; width: 130%; }
2270 .ticket-stats { right: 22px; bottom: 25px; left: 22px; justify-content: space-between; gap: 8px; }
2271 .ticket-stats strong { font-size: 1.45rem; }
2272 .ticket-notch { display: none; }
2273 .dashboard-grid, .dish-grid-two, .dish-grid-three, .destination-grid, .trip-list, .challenge-grid, .profile-side, .public-country-list, .public-tasting-grid, .compare-grid { grid-template-columns: 1fr; }
2274 .recent-tastings { grid-template-columns: 1fr; }
2275 .section-heading { align-items: flex-start; flex-direction: column; }
2276 .section-note { align-items: flex-start; }
2277 .atlas-map-panel { min-height: 255px; padding: 45px 5px 10px; }
2278 .atlas-map-panel .world-map { width: 100%; }
2279 .atlas-map-copy { top: 12px; left: 13px; padding: 8px 10px; }
2280 .atlas-map-copy .eyebrow, .atlas-map-copy p { display: none; }
2281 .atlas-map-copy strong { font-size: 1.4rem; }
2282 .filter-bar, .journal-toolbar { align-items: stretch; flex-direction: column; }
2283 .search-field { width: 100%; }
2284 .filter-chips { justify-content: flex-start; }
2285 .destination-hero { display: flex; min-height: 500px; flex-direction: column; align-items: flex-start; justify-content: center; padding: 28px; }
2286 .destination-hero-code { position: absolute; top: 25px; right: 22px; font-size: 4rem; transform: none; }
2287 .destination-coverage-block { align-items: flex-start; }
2288 .culture-note { align-items: flex-start; }
2289 .journal-entry { grid-template-columns: 85px 1fr; gap: 12px; }
2290 .journal-image { min-height: 100px; }
2291 .journal-title-row { align-items: flex-start; }
2292 .journal-place { flex-wrap: wrap; }
2293 .journal-place time { width: 100%; margin-left: 20px; }
2294 .journal-actions { grid-column: 1 / -1; justify-content: flex-end; padding: 0; }
2295 .trip-detail-hero, .challenge-hero { align-items: flex-start; flex-direction: column; padding: 28px; }
2296 .trip-detail-score { align-items: flex-start; }
2297 .mission-sheet { padding: 22px 18px; }
2298 .mission-sheet > header { align-items: flex-start; flex-direction: column; }
2299 .mission-sheet li { grid-template-columns: 42px 1fr; gap: 12px; }
2300 .mission-sheet li > .button, .mission-done { grid-column: 2; justify-self: start; }
2301 .form-grid-two, .photo-location-row { grid-template-columns: 1fr; }
2302 .dialog-backdrop { padding: 0; place-items: end center; }
2303 .taste-dialog, .small-dialog { width: 100%; max-height: 94vh; border-radius: 18px 18px 0 0; }
2304 .dialog-actions .button { flex: 1; }
2305 .join-strip { grid-template-columns: 1fr; }
2306 .join-strip form { width: 100%; }
2307 .join-strip form input { flex: 1; width: auto; }
2308 .challenge-side { display: flex; }
2309 .profile-form { padding: 20px; }
2310 .profile-identity { align-items: flex-start; }
2311 .share-actions { flex-direction: column; }
2312 .public-main { width: calc(100% - 24px); }
2313 .public-passport { min-height: 650px; padding: 25px; }
2314 .public-person { align-items: flex-start; }
2315 .public-person h1 { font-size: 2.8rem; }
2316 .public-map { right: -50px; bottom: 90px; width: 135%; }
2317 .public-stats { right: 23px; bottom: 25px; left: 23px; }
2318 .public-cta { align-items: flex-start; flex-direction: column; padding: 27px; }
2319 .match-card { grid-template-columns: 1fr 1fr; }
2320 .match-score { grid-column: 1 / -1; grid-row: 2; border: 0; border-top: 1px dashed #52617b; }
2321 .shared-bite { grid-template-columns: auto 1fr; }
2322 .shared-bite .button { grid-column: 1 / -1; }
2323 }
2324
2325 @media (prefers-reduced-motion: reduce) {
2326 *, *::before, *::after {
2327 scroll-behavior: auto !important;
2328 animation-duration: 0.01ms !important;
2329 animation-iteration-count: 1 !important;
2330 transition-duration: 0.01ms !important;
2331 }
2332 }
2333