Graphical PDS migrator for AT Protocol
1@import "tailwindcss";
2@import url("https://api.fonts.coollabs.io/css2?family=Share+Tech+Mono&display=swap");
3
4@font-face {
5 font-family: "Skyfont";
6 src: url("fonts/skyfont.regular.otf") format("opentype");
7 font-weight: normal;
8 font-style: normal;
9}
10
11@font-face {
12 font-family: "F25_Bank_Printer";
13 src: url("fonts/F25_Bank_Printer.ttf") format("truetype");
14 font-weight: normal;
15 font-style: normal;
16}
17
18@font-face {
19 font-family: "SpaceMono";
20 src: url("fonts/SpaceMono-Regular.ttf") format("truetype");
21 font-weight: normal;
22 font-style: normal;
23}
24
25@layer theme, base, components, utilities;
26@import "tailwindcss/theme.css" layer(theme);
27@import "tailwindcss/preflight.css" layer(base);
28@import "tailwindcss/utilities.css" layer(utilities);
29
30
31@keyframes fadeOut {
32 0% {
33 opacity: 1;
34 }
35
36 75% {
37 opacity: 1;
38 }
39
40 /* Hold full opacity for most of the animation */
41 100% {
42 opacity: 0;
43 }
44}
45
46.status-message-fade {
47 animation: fadeOut 2s forwards;
48}
49
50.font-spectral {
51 font-family: "Spectral", serif;
52}
53
54.grow-wrap {
55 /* easy way to plop the elements on top of each other and have them both sized based on the tallest one's height */
56 display: grid;
57}
58
59.grow-wrap::after {
60 /* Note the weird space! Needed to preventy jumpy behavior */
61 content: attr(data-replicated-value) " ";
62
63 /* This is how textarea text behaves */
64 white-space: pre-wrap;
65
66 /* Hidden from view, clicks, and screen readers */
67 visibility: hidden;
68}
69
70.grow-wrap>textarea {
71 /* You could leave this, but after a user resizes, then it ruins the auto sizing */
72 resize: none;
73
74 /* Firefox shows scrollbar on growth, you can hide like this. */
75 overflow: hidden;
76}
77
78.grow-wrap>textarea,
79.grow-wrap::after {
80 /* Identical styling required!! */
81 font: inherit;
82
83 /* Place on top of each other */
84 grid-area: 1 / 1 / 2 / 2;
85}
86
87/* Base styling */
88@layer base {
89 body {
90 @apply bg-gray-50 dark:bg-gray-900 text-gray-900 dark:text-gray-100;
91 font-family: SpaceMono;
92 }
93
94 button {
95 @apply rounded-xl;
96 font-family: SpaceMono;
97 }
98
99 input {
100 @apply px-4 py-2;
101 }
102
103 h1,
104 h2,
105 h3,
106 h4,
107 h5 {
108 font-family: Share Tech Mono, monospace;
109 }
110}
111
112.ticket {
113 font-family: F25_Bank_Printer, monospace;
114 @apply bg-white dark:bg-gray-800 p-8 relative overflow-hidden;
115 position: relative;
116 /* Angled corners */
117 clip-path: polygon(20px 0,
118 /* Top left corner */
119 calc(100% - 20px) 0,
120 /* Top right corner */
121 100% 20px,
122 /* Top right */
123 100% calc(100% - 20px),
124 /* Bottom right */
125 calc(100% - 20px) 100%,
126 /* Bottom right corner */
127 20px 100%,
128 /* Bottom left corner */
129 0 calc(100% - 20px),
130 /* Bottom left */
131 0 20px
132 /* Back to top left */
133 );
134}
135
136/* Create side perforations using pseudo-elements */
137.ticket::before,
138.ticket::after {
139 content: "";
140 position: absolute;
141 top: 30px;
142 bottom: 30px;
143 width: 1px;
144 background-image: linear-gradient(to bottom,
145 transparent 0%,
146 transparent 40%,
147 currentColor 40%,
148 currentColor 60%,
149 transparent 60%,
150 transparent 100%);
151 background-size: 100% 20px;
152 background-repeat: repeat-y;
153 opacity: 0.2;
154}
155
156.ticket::before {
157 left: 8px;
158}
159
160.ticket::after {
161 right: 8px;
162}
163
164.dark .ticket {
165 background-image:
166 radial-gradient(circle at 10px center,
167 rgb(17 24 39) 4px,
168 transparent 4px),
169 radial-gradient(circle at calc(100% - 10px) center,
170 rgb(17 24 39) 4px,
171 transparent 4px);
172}
173
174/* Remove the previous background images and corner cuts */
175.ticket::before,
176.ticket::after {
177 display: none;
178}
179
180.boarding-label {
181 @apply absolute top-2 right-2 bg-blue-100 dark:bg-blue-900 px-3 py-1 rounded-full text-xs font-bold uppercase tracking-wider;
182 transform: rotate(2deg);
183}
184
185.flight-info {
186 @apply flex justify-between items-center mt-4 pt-4 border-t border-dashed;
187}
188
189.passenger-info {
190 @apply text-sm text-gray-600 dark:text-gray-400 mt-2;
191}
192
193/* Modern Airport Sign Styles */
194.airport-sign {
195 position: relative;
196 transform-origin: top;
197 transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
198 border-radius: 0.5rem;
199 backdrop-filter: blur(8px);
200}
201
202/* Dropdown panel styles */
203.airport-sign+div {
204 border-radius: 0.5rem;
205 backdrop-filter: blur(8px);
206}
207
208/* Remove old texture styles */
209.airport-sign,
210.airport-sign+div {
211 background-blend-mode: overlay;
212}
213
214@keyframes popin {
215 0% {
216 opacity: 0;
217 transform: scale(0.95);
218 }
219
220 100% {
221 opacity: 1;
222 transform: scale(1);
223 }
224}
225
226.animate-popin {
227 animation: popin 0.25s cubic-bezier(0.4, 0, 0.2, 1);
228}
229
230@keyframes bounce-short {
231
232 0%,
233 100% {
234 transform: translateY(0);
235 }
236
237 50% {
238 transform: translateY(-8px);
239 }
240}
241
242.animate-bounce-short {
243 animation: bounce-short 0.5s;
244}