1:root {
2 --bg: #0a0e14;
3 --panel: #11161f;
4 --panel-2: #161c27;
5 --border: #232b38;
6 --text: #d7dde7;
7 --text-dim: #8a94a6;
8 --accent: #58a6ff;
9 --accent-strong: #388bfd;
10
11
12 --grid-bg: #0d1117;
13 --grid-line: #1b2430;
14 --cell: #3fb950;
15 --cell-preview: rgba(88, 166, 255, 0.45);
16}
17
18* {
19 box-sizing: border-box;
20}
21
22html,
23body {
24 margin: 0;
25 padding: 0;
26}
27
28body {
29 background: var(--bg);
30 color: var(--text);
31 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica,
32 Arial, sans-serif;
33 line-height: 1.5;
34 -webkit-font-smoothing: antialiased;
35}
36
37.app-header {
38 text-align: center;
39 padding: 28px 16px 8px;
40}
41
42.app-header h1 {
43 margin: 0;
44 font-size: 1.7rem;
45 letter-spacing: -0.01em;
46}
47
48.tagline {
49 margin: 4px 0 0;
50 color: var(--text-dim);
51 font-size: 0.95rem;
52}
53
54.app {
55 max-width: 1140px;
56 margin: 0 auto;
57 padding: 16px;
58}
59
60
61.toolbar,
62.patterns {
63 display: flex;
64 flex-wrap: wrap;
65 align-items: center;
66 gap: 14px 20px;
67 background: var(--panel);
68 border: 1px solid var(--border);
69 border-radius: 12px;
70 padding: 14px 16px;
71 margin-bottom: 14px;
72}
73
74.control-group {
75 display: flex;
76 align-items: center;
77 gap: 8px;
78}
79
80.control-group.stats {
81 margin-left: auto;
82}
83
84
85.btn {
86 appearance: none;
87 cursor: pointer;
88 border: 1px solid var(--border);
89 background: var(--panel-2);
90 color: var(--text);
91 font-size: 0.9rem;
92 font-weight: 500;
93 padding: 8px 14px;
94 border-radius: 8px;
95 transition: background 0.15s ease, border-color 0.15s ease,
96 transform 0.05s ease;
97}
98
99.btn:hover {
100 background: #1e2634;
101 border-color: #303b4d;
102}
103
104.btn:active {
105 transform: translateY(1px);
106}
107
108.btn.primary {
109 background: var(--accent-strong);
110 border-color: var(--accent-strong);
111 color: #fff;
112}
113
114.btn.primary:hover {
115 background: var(--accent);
116 border-color: var(--accent);
117}
118
119.btn.active {
120 border-color: var(--accent);
121 color: var(--accent);
122 box-shadow: inset 0 0 0 1px var(--accent);
123}
124
125.btn.primary.active {
126 color: #fff;
127}
128
129
130.slider,
131.toggle {
132 display: flex;
133 align-items: center;
134 gap: 8px;
135 font-size: 0.9rem;
136 color: var(--text-dim);
137 user-select: none;
138}
139
140.slider input[type="range"] {
141 accent-color: var(--accent);
142 width: 150px;
143}
144
145.slider .value {
146 color: var(--text);
147 font-variant-numeric: tabular-nums;
148 min-width: 62px;
149}
150
151.toggle input {
152 accent-color: var(--accent);
153 width: 16px;
154 height: 16px;
155}
156
157
158.stat {
159 font-size: 0.9rem;
160 color: var(--text-dim);
161}
162
163.stat strong {
164 color: var(--text);
165 font-variant-numeric: tabular-nums;
166 margin-left: 4px;
167}
168
169
170.patterns {
171 margin-top: -2px;
172}
173
174.patterns-label {
175 font-size: 0.85rem;
176 color: var(--text-dim);
177}
178
179.pattern-buttons {
180 display: flex;
181 gap: 8px;
182 flex-wrap: wrap;
183}
184
185.divider {
186 width: 1px;
187 align-self: stretch;
188 background: var(--border);
189}
190
191.hint {
192 font-size: 0.82rem;
193 color: var(--text-dim);
194 margin-left: auto;
195}
196
197
198.canvas-wrap {
199 background: var(--panel);
200 border: 1px solid var(--border);
201 border-radius: 12px;
202 padding: 10px;
203 overflow: auto;
204}
205
206#grid {
207 display: block;
208 width: 100%;
209 height: auto;
210 max-width: 100%;
211 border-radius: 6px;
212 cursor: crosshair;
213 image-rendering: pixelated;
214}
215
216#grid.placing {
217 cursor: copy;
218}
219
220
221.app-footer {
222 margin-top: 14px;
223 color: var(--text-dim);
224 font-size: 0.85rem;
225 text-align: center;
226}
227
228.app-footer a {
229 color: var(--accent);
230 text-decoration: none;
231}
232
233.app-footer a:hover {
234 text-decoration: underline;
235}
236
Discussion
No comments yet. Start the discussion. Recorded by @patrick-toulme.