1:root {
2 color-scheme: dark;
3 --bg: #080b12;
4 --bg-soft: #0f1524;
5 --panel: rgba(20, 29, 48, 0.86);
6 --panel-strong: #182238;
7 --text: #f5f7fb;
8 --muted: #9ba9c4;
9 --accent: #7dd3fc;
10 --accent-strong: #38bdf8;
11 --danger: #fb7185;
12 --ring: rgba(125, 211, 252, 0.5);
13 --border: rgba(148, 163, 184, 0.2);
14 font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
15}
16
17* { box-sizing: border-box; }
18
19body {
20 min-height: 100vh;
21 margin: 0;
22 color: var(--text);
23 background:
24 radial-gradient(circle at top left, rgba(56, 189, 248, 0.18), transparent 32rem),
25 radial-gradient(circle at bottom right, rgba(129, 140, 248, 0.16), transparent 34rem),
26 var(--bg);
27}
28
29button, input, select { font: inherit; }
30
31.app {
32 width: min(980px, calc(100% - 32px));
33 margin: 0 auto;
34 padding: 44px 0;
35}
36
37.hero {
38 display: flex;
39 align-items: flex-start;
40 justify-content: space-between;
41 gap: 24px;
42 margin-bottom: 24px;
43}
44
45.eyebrow {
46 margin: 0 0 8px;
47 color: var(--accent);
48 font-weight: 700;
49 letter-spacing: 0.16em;
50 text-transform: uppercase;
51}
52
53h1, h2, p { margin-top: 0; }
54
55h1 {
56 margin-bottom: 10px;
57 font-size: clamp(2.2rem, 8vw, 5rem);
58 line-height: 0.95;
59 letter-spacing: -0.07em;
60}
61
62.lede {
63 max-width: 680px;
64 margin-bottom: 0;
65 color: var(--muted);
66 font-size: 1.12rem;
67}
68
69.panel {
70 padding: 24px;
71 margin-bottom: 18px;
72 border: 1px solid var(--border);
73 border-radius: 28px;
74 background: linear-gradient(180deg, var(--panel), rgba(15, 21, 36, 0.78));
75 box-shadow: 0 24px 80px rgba(0, 0, 0, 0.35);
76 backdrop-filter: blur(18px);
77}
78
79.toolbar {
80 display: grid;
81 grid-template-columns: 1fr minmax(180px, 240px);
82 gap: 16px;
83 margin-bottom: 18px;
84}
85
86label span, .value-card > label {
87 display: block;
88 margin-bottom: 8px;
89 color: var(--muted);
90 font-size: 0.9rem;
91 font-weight: 700;
92 letter-spacing: 0.02em;
93}
94
95input, select, button, .test-link {
96 border: 1px solid var(--border);
97 border-radius: 16px;
98 color: var(--text);
99 background: var(--panel-strong);
100}
101
102input, select {
103 width: 100%;
104 padding: 13px 14px;
105 outline: none;
106}
107
108input {
109 font-size: clamp(1.6rem, 4vw, 3rem);
110 font-weight: 750;
111 letter-spacing: -0.04em;
112}
113
114select { cursor: pointer; }
115
116button, .test-link {
117 cursor: pointer;
118 text-decoration: none;
119 transition: transform 140ms ease, border-color 140ms ease, background 140ms ease;
120}
121
122button:hover, .test-link:hover {
123 border-color: rgba(125, 211, 252, 0.6);
124 background: #1d2b46;
125}
126
127button:active, .test-link:active { transform: translateY(1px); }
128
129:focus-visible {
130 outline: 3px solid var(--ring);
131 outline-offset: 3px;
132}
133
134.test-link {
135 flex: none;
136 padding: 10px 14px;
137 color: var(--accent);
138 font-weight: 800;
139}
140
141.converter-grid {
142 display: grid;
143 grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
144 align-items: end;
145 gap: 16px;
146}
147
148.value-card {
149 min-width: 0;
150 padding: 18px;
151 border: 1px solid var(--border);
152 border-radius: 22px;
153 background: rgba(8, 11, 18, 0.36);
154}
155
156.value-card input { margin-bottom: 12px; }
157
158.swap {
159 width: 56px;
160 height: 56px;
161 margin-bottom: 44px;
162 border-radius: 999px;
163 color: #06101a;
164 background: linear-gradient(135deg, var(--accent), var(--accent-strong));
165 font-size: 1.65rem;
166 font-weight: 900;
167}
168
169.status {
170 min-height: 1.5em;
171 margin: 18px 0 8px;
172 color: var(--accent);
173 font-weight: 700;
174}
175
176.status.error { color: var(--danger); }
177
178.shortcuts {
179 color: var(--muted);
180 font-size: 0.92rem;
181}
182
183kbd {
184 display: inline-block;
185 padding: 2px 7px;
186 border: 1px solid var(--border);
187 border-bottom-width: 2px;
188 border-radius: 7px;
189 color: var(--text);
190 background: #0a1020;
191 font-size: 0.82em;
192}
193
194.section-heading {
195 display: flex;
196 align-items: center;
197 justify-content: space-between;
198 gap: 16px;
199 margin-bottom: 12px;
200}
201
202.section-heading h2 { margin: 0; }
203
204.section-heading button {
205 padding: 8px 12px;
206 color: var(--muted);
207}
208
209#recentList {
210 display: grid;
211 gap: 8px;
212 padding: 0;
213 margin: 0;
214 list-style: none;
215}
216
217#recentList button {
218 width: 100%;
219 padding: 12px 14px;
220 text-align: left;
221 color: var(--text);
222}
223
224#recentList .empty {
225 color: var(--muted);
226}
227
228@media (max-width: 760px) {
229 .app { width: min(100% - 20px, 980px); padding: 24px 0; }
230 .hero, .toolbar, .converter-grid { grid-template-columns: 1fr; display: grid; }
231 .test-link { justify-self: start; }
232 .swap { margin: 0; justify-self: center; transform: rotate(90deg); }
233 .swap:active { transform: rotate(90deg) translateY(1px); }
234 .panel { padding: 18px; border-radius: 22px; }
235}
236
Discussion
No comments yet. Start the discussion. Recorded by @patrick-toulme.