ATlast — you'll never need to find your favorites on another platform again. Find your favs in the ATmosphere.
atproto
1@import url("https://fonts.googleapis.com/css2?family=Fira+Sans:wght@400;500;600;700;800&family=Rubik:wght@400;500;600;700&display=swap");
2@tailwind base;
3@tailwind components;
4@tailwind utilities;
5
6@layer base {
7 * {
8 font-family:
9 "Fira Sans",
10 system-ui,
11 -apple-system,
12 sans-serif;
13 }
14
15 h1,
16 h2,
17 h3,
18 .font-display {
19 font-family: "Rubik", "Fira Sans", sans-serif;
20 }
21
22 html,
23 body {
24 min-height: 100vh;
25 min-height: -webkit-fill-available;
26 }
27
28 body {
29 @apply bg-gradient-to-br
30 from-cyan-50 via-purple-50 to-pink-50
31 dark:from-indigo-950 dark:via-purple-900 dark:to-slate-900
32 text-slate-900 dark:text-slate-100
33 transition-colors duration-300;
34 padding: env(safe-area-inset-top) env(safe-area-inset-right)
35 env(safe-area-inset-bottom) env(safe-area-inset-left);
36 }
37
38 button {
39 cursor: pointer;
40 }
41}
42
43/* Hide scrollbar but allow scrolling */
44.scrollbar-hide {
45 -ms-overflow-style: none;
46 scrollbar-width: none;
47}
48
49.scrollbar-hide::-webkit-scrollbar {
50 display: none;
51}
52
53/* Firefly animation keyframes */
54@keyframes float {
55 0%,
56 100% {
57 transform: translate(0, 0) scale(1);
58 opacity: 0.3;
59 }
60 25% {
61 transform: translate(10px, -20px) scale(1.2);
62 opacity: 0.8;
63 }
64 50% {
65 transform: translate(-5px, -40px) scale(1);
66 opacity: 0.5;
67 }
68 75% {
69 transform: translate(15px, -25px) scale(1.1);
70 opacity: 0.9;
71 }
72}
73
74@keyframes glow-pulse {
75 0%,
76 100% {
77 box-shadow: 0 0 20px rgba(251, 191, 36, 0.3);
78 }
79 50% {
80 box-shadow:
81 0 0 40px rgba(251, 191, 36, 0.6),
82 0 0 60px rgba(251, 191, 36, 0.3);
83 }
84}
85
86@keyframes svg-glow-left {
87 0%,
88 100% {
89 opacity: 0.5;
90 filter: blur(10px);
91 transform: scale(1);
92 }
93 50% {
94 opacity: 1;
95 filter: blur(15px);
96 transform: scale(1.2);
97 }
98}
99
100@keyframes svg-glow-right {
101 0%,
102 100% {
103 opacity: 0.5;
104 filter: blur(10px);
105 transform: scale(1);
106 }
107 50% {
108 opacity: 1;
109 filter: blur(15px);
110 transform: scale(1.2);
111 }
112}
113
114.logo-glow-container {
115 position: relative;
116 display: inline-block;
117}
118
119.logo-glow-container::before,
120.logo-glow-container::after {
121 content: "";
122 position: absolute;
123 width: 30px;
124 height: 30px;
125 border-radius: 50%;
126 pointer-events: none;
127 z-index: -1; /* Places glow behind the SVG */
128}
129
130/* Left firefly glow - cyan tint */
131.logo-glow-container::before {
132 bottom: 0;
133 left: 6%;
134 background: radial-gradient(
135 circle,
136 rgba(253, 224, 71, 1) 0%,
137 rgba(245, 158, 11, 0.8) 30%,
138 transparent 80%
139 );
140 animation: svg-glow-left 3s ease-in-out infinite;
141}
142
143/* Right firefly glow - orange/amber tint */
144.logo-glow-container::after {
145 bottom: 0;
146 right: 4%;
147 background: radial-gradient(
148 circle,
149 rgba(253, 224, 71, 1) 0%,
150 rgba(245, 158, 11, 0.8) 30%,
151 transparent 80%
152 );
153 animation: svg-glow-right 3s ease-in-out infinite 0.5s; /* offset timing */
154}
155
156/* Actor typeahead */
157actor-typeahead {
158 --color-background: rgb(249 250 251 / 1);
159 --color-border: rgb(6 182 212 / 0.5);
160 --color-shadow: rgb(88 28 135);
161 --color-hover: rgb(6 182 212 / 0.1);
162 --color-avatar-fallback: rgb(6 182 212 / 0.2);
163 --radius: 0.75rem;
164 --padding-menu: 0.5rem;
165}
166
167.dark actor-typeahead {
168 --color-background: rgb(15 23 42 / 1);
169 --color-border: rgb(126 34 206 / 0.3);
170 --color-shadow: rgb(0 0 0);
171 --color-hover: rgb(126 34 206 / 0.2);
172 --color-avatar-fallback: rgb(126 34 206 / 0.2);
173}
174
175/* Notification animations */
176@keyframes slide-in {
177 from {
178 transform: translateX(100%);
179 opacity: 0;
180 }
181 to {
182 transform: translateX(0);
183 opacity: 1;
184 }
185}
186
187.animate-slide-in {
188 animation: slide-in 0.3s ease-out;
189}