src/App.css 5.0 K raw
1
/* Layout */
2
3
.app {
4
  width: 100vw;
5
  height: 100vh;
6
  position: relative;
7
  overflow: hidden;
8
  background: #121113;
9
}
10
11
/* Camera */
12
13
.camera-view {
14
  width: 100%;
15
  height: 100%;
16
  display: flex;
17
  align-items: center;
18
  justify-content: center;
19
}
20
21
.camera-canvas {
22
  width: 100%;
23
  height: 100%;
24
  object-fit: contain;
25
}
26
27
.camera-error {
28
  width: 100%;
29
  height: 100%;
30
  display: flex;
31
  align-items: center;
32
  justify-content: center;
33
}
34
35
.camera-error p {
36
  color: #ffffff;
37
  border-left: 2px solid #ffffff;
38
  padding-left: 0.5rem;
39
  font-size: 13px;
40
  opacity: 0.8;
41
}
42
43
/* Fullscreen Button */
44
45
.fullscreen-btn {
46
  position: fixed;
47
  top: 1rem;
48
  left: 1rem;
49
  width: 32px;
50
  height: 32px;
51
  background: #121113;
52
  color: #ffffff;
53
  border: 1px solid #333;
54
  cursor: pointer;
55
  display: flex;
56
  align-items: center;
57
  justify-content: center;
58
  border-radius: 0;
59
  padding: 0;
60
  z-index: 10;
61
  opacity: 0.7;
62
  transition: opacity 0.15s, border-color 0.15s;
63
}
64
65
.fullscreen-btn:hover {
66
  opacity: 1;
67
  border-color: #ffffff;
68
}
69
70
/* Control Panel */
71
72
.control-panel {
73
  position: fixed;
74
  top: 0;
75
  right: 0;
76
  height: 100vh;
77
  width: 320px;
78
  transform: translateX(100%);
79
  transition: transform 0.3s ease;
80
  z-index: 10;
81
  display: flex;
82
}
83
84
.control-panel.open {
85
  transform: translateX(0);
86
}
87
88
.panel-toggle {
89
  position: absolute;
90
  left: -32px;
91
  top: 50%;
92
  transform: translateY(-50%);
93
  width: 32px;
94
  height: 64px;
95
  background: #121113;
96
  color: #ffffff;
97
  border: 1px solid #333;
98
  border-right: none;
99
  cursor: pointer;
100
  font-size: 20px;
101
  display: flex;
102
  align-items: center;
103
  justify-content: center;
104
  border-radius: 0;
105
  padding: 0;
106
}
107
108
.panel-toggle:hover {
109
  opacity: 0.7;
110
}
111
112
.panel-content {
113
  flex: 1;
114
  background: #121113;
115
  border-left: 1px solid #333;
116
  overflow-y: auto;
117
  padding: 1.5rem 1rem;
118
  display: flex;
119
  flex-direction: column;
120
  gap: 1.5rem;
121
  scrollbar-width: none;
122
}
123
124
.panel-content::-webkit-scrollbar {
125
  display: none;
126
}
127
128
.panel-header {
129
  display: flex;
130
  justify-content: space-between;
131
  align-items: center;
132
  padding-bottom: 0.75rem;
133
  border-bottom: 1px solid #333;
134
}
135
136
.panel-title {
137
  font-size: 16px;
138
  font-weight: 700;
139
  text-transform: uppercase;
140
}
141
142
.reset-btn {
143
  background: #121113;
144
  color: #ffffff;
145
  border: 1px solid white;
146
  padding: 0.25rem 0.5rem;
147
  font-size: 12px;
148
  cursor: pointer;
149
  border-radius: 0;
150
}
151
152
.reset-btn:hover {
153
  opacity: 0.7;
154
}
155
156
/* Randomize */
157
158
.randomize-section {
159
  display: flex;
160
  gap: 0.5rem;
161
}
162
163
.randomize-btn {
164
  flex: 1;
165
  background: #121113;
166
  color: #ffffff;
167
  border: 1px solid #555;
168
  padding: 0.4rem 0;
169
  font-size: 12px;
170
  font-weight: 700;
171
  cursor: pointer;
172
  border-radius: 0;
173
}
174
175
.randomize-btn:hover {
176
  border-color: #ffffff;
177
}
178
179
.fluid-toggle {
180
  background: #121113;
181
  color: #ffffff;
182
  border: 1px solid #555;
183
  padding: 0.4rem 0.75rem;
184
  font-size: 12px;
185
  font-weight: 700;
186
  cursor: pointer;
187
  border-radius: 0;
188
  opacity: 0.5;
189
  transition: opacity 0.15s, border-color 0.15s;
190
}
191
192
.fluid-toggle:hover {
193
  opacity: 0.7;
194
}
195
196
.fluid-toggle.active {
197
  opacity: 1;
198
  border-color: #ffffff;
199
}
200
201
.panel-header-actions {
202
  display: flex;
203
  gap: 0.5rem;
204
  align-items: center;
205
}
206
207
/* Sections */
208
209
.panel-section {
210
  display: flex;
211
  flex-direction: column;
212
  gap: 0.75rem;
213
}
214
215
.section-label {
216
  font-size: 12px;
217
  opacity: 0.5;
218
  text-transform: uppercase;
219
  font-weight: 700;
220
}
221
222
/* Slider */
223
224
.slider-group {
225
  display: flex;
226
  flex-direction: column;
227
  gap: 0.5rem;
228
}
229
230
.slider-row {
231
  display: flex;
232
  flex-direction: column;
233
  gap: 0.2rem;
234
}
235
236
.slider-header {
237
  display: flex;
238
  justify-content: space-between;
239
  align-items: center;
240
}
241
242
.slider-header label {
243
  font-size: 12px;
244
  opacity: 0.7;
245
}
246
247
.slider-value {
248
  font-size: 12px;
249
  opacity: 0.5;
250
}
251
252
/* Range Input Styling */
253
254
input[type="range"] {
255
  -webkit-appearance: none;
256
  appearance: none;
257
  width: 100%;
258
  height: 2px;
259
  background: #555;
260
  outline: none;
261
  border: none;
262
  border-radius: 0;
263
}
264
265
input[type="range"]::-webkit-slider-thumb {
266
  -webkit-appearance: none;
267
  appearance: none;
268
  width: 12px;
269
  height: 12px;
270
  background: #ffffff;
271
  border: none;
272
  border-radius: 0;
273
  cursor: pointer;
274
}
275
276
input[type="range"]::-moz-range-thumb {
277
  width: 12px;
278
  height: 12px;
279
  background: #ffffff;
280
  border: none;
281
  border-radius: 0;
282
  cursor: pointer;
283
}
284
285
input[type="range"]::-webkit-slider-thumb:hover {
286
  opacity: 0.7;
287
}
288
289
input[type="range"]::-moz-range-thumb:hover {
290
  opacity: 0.7;
291
}
292
293
/* Curves Editor */
294
295
.curves-editor {
296
  display: flex;
297
  flex-direction: column;
298
  gap: 0.5rem;
299
}
300
301
.curves-tabs {
302
  display: flex;
303
  gap: 0;
304
}
305
306
.curves-tab {
307
  flex: 1;
308
  background: #121113;
309
  color: #ffffff;
310
  border: 1px solid #333;
311
  padding: 0.3rem 0;
312
  font-size: 12px;
313
  cursor: pointer;
314
  border-radius: 0;
315
  opacity: 0.5;
316
}
317
318
.curves-tab + .curves-tab {
319
  border-left: none;
320
}
321
322
.curves-tab.active {
323
  opacity: 1;
324
  border-color: #ffffff;
325
}
326
327
.curves-tab:hover {
328
  opacity: 0.7;
329
}
330
331
.curves-canvas {
332
  cursor: crosshair;
333
  border: 1px solid #333;
334
  display: block;
335
  width: 100% !important;
336
  height: auto !important;
337
  aspect-ratio: 1;
338
}