Skip to content
165 linesCodeBlameRaw
1/* The launcher, in the site's colours (packages/theme/tokens.css): a very
2 dark gray and lavender, the mark centred, one short message. */
3:root {
4 --bg: #0f0f11;
5 --fg: #ededf0;
6 --muted: #9a9aa6;
7 --line: #26262c;
8 --surface: #17171b;
9 --accent: #b6a8ff;
10 --accent-ink: #15112e;
11 --error: #ff8a8a;
12 color-scheme: dark;
13}
14* {
15 box-sizing: border-box;
16}
17html,
18body {
19 height: 100%;
20 margin: 0;
21}
22body {
23 background: var(--bg);
24 color: var(--fg);
25 font: 15px/1.5 system-ui, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
26 -webkit-font-smoothing: antialiased;
27 display: grid;
28 place-items: center;
29 user-select: none;
30 cursor: default;
31}
32/* Under the app's own title bar (src/frame.rs): the page fills what is below it. */
33html[data-titlebar] {
34 padding-top: 0;
35}
36html[data-titlebar] body {
37 padding-top: 36px;
38}
39main {
40 width: min(26rem, calc(100vw - 2rem));
41 text-align: center;
42}
43.mark {
44 width: 72px;
45 height: 72px;
46 display: block;
47 margin: 0 auto 1.5rem;
48 border-radius: 16px;
49 box-shadow: 0 0 0 1px var(--line);
50}
51h1 {
52 font-size: 1.125rem;
53 font-weight: 600;
54 margin: 0 0 0.5rem;
55}
56p {
57 margin: 0 0 1rem;
58}
59.muted {
60 color: var(--muted);
61}
62.small {
63 font-size: 0.8125rem;
64}
65.error {
66 color: var(--error);
67 font-size: 0.875rem;
68 text-align: left;
69}
70.status {
71 display: inline-flex;
72 align-items: center;
73 gap: 0.625rem;
74 color: var(--muted);
75}
76.pulse {
77 width: 8px;
78 height: 8px;
79 border-radius: 50%;
80 background: var(--accent);
81 animation: pulse 1.4s ease-in-out infinite;
82}
83@keyframes pulse {
84 0%,
85 100% {
86 opacity: 0.35;
87 transform: scale(0.85);
88 }
89 50% {
90 opacity: 1;
91 transform: scale(1);
92 }
93}
94@media (prefers-reduced-motion: reduce) {
95 .pulse {
96 animation: none;
97 }
98}
99.row {
100 display: flex;
101 gap: 0.5rem;
102 justify-content: center;
103 flex-wrap: wrap;
104 margin-bottom: 1rem;
105}
106button {
107 font: inherit;
108 font-size: 0.875rem;
109 font-weight: 500;
110 padding: 0.5rem 0.875rem;
111 border-radius: 8px;
112 border: 1px solid var(--line);
113 background: var(--surface);
114 color: var(--fg);
115 cursor: default;
116}
117button:hover {
118 border-color: #3a3a44;
119}
120button:focus-visible,
121input:focus-visible {
122 outline: 2px solid var(--accent);
123 outline-offset: 2px;
124}
125button.primary {
126 background: var(--accent);
127 border-color: var(--accent);
128 color: var(--accent-ink);
129}
130button.primary:hover {
131 filter: brightness(1.06);
132}
133form {
134 text-align: left;
135}
136label {
137 display: block;
138 font-size: 0.8125rem;
139 color: var(--muted);
140 margin-bottom: 0.25rem;
141}
142input {
143 font: inherit;
144 width: 100%;
145 padding: 0.5rem 0.625rem;
146 border-radius: 8px;
147 border: 1px solid var(--line);
148 background: var(--surface);
149 color: var(--fg);
150 margin-bottom: 0.75rem;
151 user-select: text;
152}
153a {
154 color: var(--muted);
155 text-decoration: underline;
156 text-underline-offset: 3px;
157}
158a:hover {
159 color: var(--fg);
160}
161.version {
162 margin-top: 2.5rem;
163 margin-bottom: 0;
164 font-variant-numeric: tabular-nums;
165}