ministerchief commited on
Commit
93b8a6f
Β·
verified Β·
1 Parent(s): 490180e

Update static/style.css

Browse files
Files changed (1) hide show
  1. static/style.css +463 -156
static/style.css CHANGED
@@ -1,36 +1,52 @@
1
  /* ── Reset & Base ────────────────────────────────────────── */
2
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
 
 
 
 
 
 
3
 
4
  :root {
5
- --bg: #f5f4f0;
6
- --surface: #ffffff;
7
- --surface2: #f9f8f5;
8
- --border: rgba(0,0,0,0.10);
9
- --border-strong: rgba(0,0,0,0.18);
10
- --text-primary: #1a1a1a;
11
- --text-secondary: #6b6b68;
12
- --text-muted: #9b9b98;
13
- --accent: #5048c8;
14
- --accent-light: #eeedfe;
15
- --accent-text: #3c3489;
 
 
 
16
  --danger: #e24b4a;
17
- --danger-light: #fcebeb;
18
  --danger-text: #a32d2d;
19
- --success: #1d9e75;
20
- --success-light: #e1f5ee;
21
- --success-text: #085041;
22
- --amber: #ba7517;
23
- --amber-light: #faeeda;
24
- --amber-text: #633806;
25
- --radius-sm: 6px;
26
- --radius-md: 8px;
27
- --radius-lg: 14px;
28
- --radius-xl: 20px;
29
- --shadow: 0 2px 12px rgba(0,0,0,0.08), 0 0 0 0.5px rgba(0,0,0,0.08);
 
 
 
 
 
 
 
30
  }
31
 
32
  body {
33
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
34
  background: var(--bg);
35
  color: var(--text-primary);
36
  min-height: 100vh;
@@ -39,96 +55,177 @@ body {
39
  align-items: center;
40
  padding: 2rem 1rem 4rem;
41
  line-height: 1.6;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  }
43
 
44
  /* ── Header ─────────────────────────────────────────────── */
45
  header {
46
  text-align: center;
47
- margin-bottom: 2.5rem;
 
 
 
 
 
 
48
  }
49
 
50
  .logo-wrap {
51
  display: inline-flex;
52
  align-items: center;
53
  justify-content: center;
54
- width: 60px; height: 60px;
55
- background: var(--accent-light);
 
56
  border-radius: var(--radius-lg);
57
- border: 0.5px solid rgba(83,74,183,0.2);
58
  margin-bottom: 1rem;
 
59
  }
60
 
61
- .logo-wrap svg { width: 30px; height: 30px; }
 
 
 
62
 
63
  header h1 {
64
- font-size: 26px;
65
- font-weight: 600;
66
  color: var(--text-primary);
67
- letter-spacing: -0.3px;
 
68
  }
69
 
70
  header p {
71
- font-size: 15px;
72
  color: var(--text-secondary);
73
- margin-top: 4px;
 
 
 
74
  }
75
 
76
  /* ── Main card ───────────────────────────────────────────── */
77
  main {
78
  width: 100%;
79
- max-width: 720px;
80
  }
81
 
82
  .card {
83
  background: var(--surface);
 
 
84
  border-radius: var(--radius-xl);
85
- border: 0.5px solid var(--border);
86
- box-shadow: var(--shadow);
87
  padding: 2rem;
 
 
 
 
 
 
 
 
 
 
88
  }
89
 
90
  /* ── Drop zone ───────────────────────────────────────────── */
91
  #drop-zone {
92
- border: 1.5px dashed var(--border-strong);
93
- border-radius: var(--radius-lg);
94
- padding: 3rem 2rem;
95
  text-align: center;
96
  cursor: pointer;
97
- transition: border-color 0.15s, background 0.15s;
98
- background: var(--surface2);
 
 
99
  position: relative;
 
 
 
 
 
 
 
 
 
100
  }
101
 
102
- #drop-zone:hover, #drop-zone.drag-over {
 
103
  border-color: var(--accent);
104
- background: var(--accent-light);
 
 
 
 
105
  }
106
 
107
  #drop-zone input[type="file"] {
108
- position: absolute; inset: 0;
109
- opacity: 0; cursor: pointer; width: 100%; height: 100%;
 
 
 
 
110
  }
111
 
112
  .drop-icon {
113
- width: 48px; height: 48px;
 
114
  margin: 0 auto 1rem;
115
- background: var(--accent-light);
116
- border-radius: var(--radius-md);
117
- display: flex; align-items: center; justify-content: center;
118
- border: 0.5px solid rgba(83,74,183,0.2);
 
 
 
119
  }
120
 
121
- .drop-icon svg { width: 24px; height: 24px; }
 
 
 
122
 
123
  #drop-zone h2 {
124
- font-size: 16px;
125
- font-weight: 500;
126
  color: var(--text-primary);
127
- margin-bottom: 4px;
128
  }
129
 
130
  #drop-zone p {
131
- font-size: 13px;
132
  color: var(--text-muted);
133
  }
134
 
@@ -140,11 +237,12 @@ main {
140
  background: var(--amber-light);
141
  color: var(--amber-text);
142
  font-size: 12px;
143
- font-weight: 500;
144
- padding: 4px 10px;
145
- border-radius: 99px;
146
- margin-top: 0.75rem;
147
- border: 0.5px solid rgba(186,117,23,0.2);
 
148
  }
149
 
150
  /* ── Counter bar ─────────────────────────────────────────── */
@@ -152,142 +250,219 @@ main {
152
  display: none;
153
  align-items: center;
154
  justify-content: space-between;
 
155
  margin-top: 1.25rem;
156
- padding: 0.6rem 0.9rem;
157
- background: var(--surface2);
158
  border-radius: var(--radius-md);
159
- border: 0.5px solid var(--border);
160
  font-size: 13px;
161
  color: var(--text-secondary);
 
162
  }
163
 
164
- #counter-bar.visible { display: flex; }
 
 
165
 
166
  #counter-bar .count-num {
167
- font-weight: 600;
168
  color: var(--text-primary);
169
  }
170
 
171
  .count-dot {
172
- width: 6px; height: 6px;
 
173
  border-radius: 50%;
174
  background: var(--success);
175
  display: inline-block;
176
- margin-right: 4px;
 
177
  }
178
 
179
- .count-dot.warn { background: var(--amber); }
180
- .count-dot.danger { background: var(--danger); }
 
 
 
 
 
 
 
181
 
182
  /* ── Image preview grid ──────────────────────────────────── */
183
  #preview-grid {
184
  display: grid;
185
- grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
186
- gap: 10px;
187
- margin-top: 1.25rem;
188
  }
189
 
190
  .preview-item {
191
  position: relative;
192
  aspect-ratio: 1;
193
- border-radius: var(--radius-md);
194
  overflow: hidden;
195
- border: 0.5px solid var(--border);
196
- background: var(--surface2);
 
 
 
 
 
 
 
 
197
  }
198
 
199
  .preview-item img {
200
- width: 100%; height: 100%;
 
201
  object-fit: cover;
202
  display: block;
203
  }
204
 
 
 
 
 
 
 
 
 
 
205
  .preview-item .remove-btn {
206
  position: absolute;
207
- top: 5px; right: 5px;
208
- width: 22px; height: 22px;
 
 
209
  border-radius: 50%;
210
- background: rgba(0,0,0,0.55);
211
- border: none;
 
212
  cursor: pointer;
213
- display: flex; align-items: center; justify-content: center;
 
 
214
  opacity: 0;
215
- transition: opacity 0.15s;
 
216
  }
217
 
218
- .preview-item:hover .remove-btn { opacity: 1; }
 
 
 
 
 
 
 
219
 
220
  .preview-item .remove-btn svg {
221
- width: 12px; height: 12px;
 
222
  stroke: #fff;
223
  }
224
 
225
  .preview-item .order-badge {
226
  position: absolute;
227
- bottom: 5px; left: 5px;
228
- background: rgba(0,0,0,0.5);
 
 
229
  color: #fff;
230
  font-size: 11px;
231
- padding: 1px 5px;
232
- border-radius: 4px;
 
 
233
  }
234
 
235
  /* ── Actions ─────────────────────────────────────────────── */
236
  .actions {
237
  display: flex;
238
- gap: 10px;
239
- margin-top: 1.5rem;
240
  }
241
 
242
  button {
243
  font-family: inherit;
244
  cursor: pointer;
245
- border-radius: var(--radius-md);
246
  font-size: 14px;
247
- font-weight: 500;
248
- padding: 10px 18px;
249
- transition: opacity 0.15s, transform 0.1s;
250
- border: 0.5px solid var(--border-strong);
 
251
  }
252
 
253
- button:active { transform: scale(0.98); }
 
 
 
 
 
 
 
254
 
255
  .btn-primary {
256
- background: var(--accent);
257
  color: #fff;
258
  border-color: transparent;
259
  flex: 1;
260
- display: flex; align-items: center; justify-content: center; gap: 8px;
 
 
 
 
261
  }
262
 
263
- .btn-primary:hover { opacity: 0.88; }
264
- .btn-primary:disabled { opacity: 0.4; cursor: not-allowed; }
 
 
 
 
 
 
 
 
 
265
 
266
  .btn-ghost {
267
- background: transparent;
268
  color: var(--text-secondary);
 
 
269
  }
270
 
271
  .btn-ghost:hover {
272
- background: var(--surface2);
273
  color: var(--text-primary);
 
274
  }
275
 
276
  /* ── Toast ───────────────────────────────────────────────── */
277
  #toast {
278
  position: fixed;
279
- bottom: 2rem; left: 50%;
280
- transform: translateX(-50%) translateY(12px);
281
- background: var(--text-primary);
 
 
282
  color: #fff;
283
  font-size: 13px;
284
- padding: 10px 18px;
285
- border-radius: 99px;
 
286
  opacity: 0;
287
  pointer-events: none;
288
- transition: opacity 0.2s, transform 0.2s;
289
  white-space: nowrap;
290
  z-index: 200;
 
291
  }
292
 
293
  #toast.show {
@@ -298,60 +473,84 @@ button:active { transform: scale(0.98); }
298
  /* ── Overlay + Premium dialog ────────────────────────────── */
299
  #overlay {
300
  display: none;
301
- position: fixed; inset: 0;
302
- background: rgba(0,0,0,0.45);
 
 
303
  z-index: 100;
304
- align-items: center; justify-content: center;
 
305
  padding: 1rem;
306
  }
307
 
308
- #overlay.show { display: flex; }
 
 
309
 
310
  #premium-dialog {
311
- background: var(--surface);
312
- border-radius: var(--radius-xl);
313
- border: 0.5px solid var(--border);
314
- box-shadow: 0 20px 60px rgba(0,0,0,0.18);
 
315
  padding: 2rem;
316
- max-width: 400px;
317
  width: 100%;
318
  text-align: center;
319
  animation: pop-in 0.22s ease;
320
  }
321
 
322
  @keyframes pop-in {
323
- from { transform: scale(0.9) translateY(12px); opacity: 0; }
324
- to { transform: scale(1) translateY(0); opacity: 1; }
 
 
 
 
 
 
325
  }
326
 
327
  .dialog-icon {
328
- width: 60px; height: 60px;
329
- border-radius: var(--radius-lg);
330
- background: var(--amber-light);
331
- display: flex; align-items: center; justify-content: center;
 
 
 
332
  margin: 0 auto 1.25rem;
333
- border: 0.5px solid rgba(186,117,23,0.2);
 
334
  }
335
 
336
- .dialog-icon svg { width: 28px; height: 28px; }
 
 
 
337
 
338
  #premium-dialog h2 {
339
- font-size: 19px;
340
- font-weight: 600;
341
  margin-bottom: 0.5rem;
 
342
  }
343
 
344
  #premium-dialog p {
345
- font-size: 14px;
346
  color: var(--text-secondary);
347
- margin-bottom: 1.5rem;
348
- line-height: 1.6;
349
  }
350
 
351
  .perks {
352
  list-style: none;
353
  text-align: left;
354
- margin-bottom: 1.75rem;
 
 
 
 
355
  }
356
 
357
  .perks li {
@@ -359,51 +558,73 @@ button:active { transform: scale(0.98); }
359
  color: var(--text-secondary);
360
  display: flex;
361
  align-items: center;
362
- gap: 8px;
363
- padding: 5px 0;
 
 
 
 
364
  }
365
 
366
  .perk-check {
367
- width: 18px; height: 18px;
 
368
  border-radius: 50%;
369
  background: var(--success-light);
370
- display: flex; align-items: center; justify-content: center;
 
 
371
  flex-shrink: 0;
372
  }
373
 
374
- .perk-check svg { width: 10px; height: 10px; stroke: var(--success); }
 
 
 
 
375
 
376
  .dialog-actions {
377
- display: flex; flex-direction: column; gap: 8px;
 
 
378
  }
379
 
380
  .btn-upgrade {
381
- background: linear-gradient(135deg, #5048c8 0%, #7f77dd 100%);
382
  color: #fff;
383
  border: none;
384
- padding: 12px;
385
  font-size: 15px;
386
- border-radius: var(--radius-md);
387
  width: 100%;
 
388
  }
389
 
390
- .btn-upgrade:hover { opacity: 0.88; }
 
 
 
391
 
392
  .btn-close-dialog {
393
- background: transparent;
394
- border: 0.5px solid var(--border-strong);
395
  color: var(--text-secondary);
396
- padding: 10px;
397
  width: 100%;
398
- border-radius: var(--radius-md);
 
 
 
 
 
399
  }
400
 
401
  /* ── Progress bar (inside btn) ───────────────────────────── */
402
  #loading-bar {
403
  display: none;
404
- height: 3px;
405
- background: rgba(255,255,255,0.3);
406
- border-radius: 2px;
407
  overflow: hidden;
408
  width: 120px;
409
  }
@@ -411,12 +632,98 @@ button:active { transform: scale(0.98); }
411
  #loading-bar-fill {
412
  height: 100%;
413
  background: #fff;
414
- border-radius: 2px;
415
- animation: slide 1s infinite;
416
  }
417
 
418
  @keyframes slide {
419
- 0% { width: 0%; margin-left: 0; }
420
- 50% { width: 60%; margin-left: 20%; }
421
- 100% { width: 0%; margin-left: 100%; }
422
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /* ── Reset & Base ────────────────────────────────────────── */
2
+ *,
3
+ *::before,
4
+ *::after {
5
+ box-sizing: border-box;
6
+ margin: 0;
7
+ padding: 0;
8
+ }
9
 
10
  :root {
11
+ --bg: linear-gradient(135deg, #f6f4ff 0%, #f4f6fb 40%, #f8f5ef 100%);
12
+ --surface: rgba(255, 255, 255, 0.92);
13
+ --surface-strong: #ffffff;
14
+ --surface2: #f8f8fc;
15
+ --border: rgba(91, 82, 196, 0.10);
16
+ --border-strong: rgba(91, 82, 196, 0.22);
17
+ --text-primary: #17171c;
18
+ --text-secondary: #666779;
19
+ --text-muted: #9698a8;
20
+ --accent: #5b52c4;
21
+ --accent-2: #7c73ea;
22
+ --accent-light: #efedff;
23
+ --accent-soft: rgba(91, 82, 196, 0.12);
24
+ --accent-text: #3f3796;
25
  --danger: #e24b4a;
26
+ --danger-light: #fef0f0;
27
  --danger-text: #a32d2d;
28
+ --success: #1ea672;
29
+ --success-light: #e5f8f0;
30
+ --success-text: #0b6c4f;
31
+ --amber: #c8841e;
32
+ --amber-light: #fff3de;
33
+ --amber-text: #714200;
34
+ --radius-sm: 8px;
35
+ --radius-md: 12px;
36
+ --radius-lg: 18px;
37
+ --radius-xl: 26px;
38
+ --shadow-sm: 0 6px 18px rgba(31, 35, 70, 0.06);
39
+ --shadow: 0 14px 40px rgba(31, 35, 70, 0.08);
40
+ --shadow-lg: 0 24px 70px rgba(31, 35, 70, 0.14);
41
+ --max-width: 760px;
42
+ }
43
+
44
+ html {
45
+ scroll-behavior: smooth;
46
  }
47
 
48
  body {
49
+ font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
50
  background: var(--bg);
51
  color: var(--text-primary);
52
  min-height: 100vh;
 
55
  align-items: center;
56
  padding: 2rem 1rem 4rem;
57
  line-height: 1.6;
58
+ position: relative;
59
+ overflow-x: hidden;
60
+ }
61
+
62
+ body::before,
63
+ body::after {
64
+ content: "";
65
+ position: fixed;
66
+ inset: auto;
67
+ width: 280px;
68
+ height: 280px;
69
+ border-radius: 50%;
70
+ filter: blur(80px);
71
+ pointer-events: none;
72
+ z-index: -1;
73
+ }
74
+
75
+ body::before {
76
+ top: -60px;
77
+ left: -80px;
78
+ background: rgba(124, 115, 234, 0.18);
79
+ }
80
+
81
+ body::after {
82
+ right: -80px;
83
+ bottom: -80px;
84
+ background: rgba(91, 82, 196, 0.14);
85
  }
86
 
87
  /* ── Header ─────────────────────────────────────────────── */
88
  header {
89
  text-align: center;
90
+ margin-bottom: 2rem;
91
+ max-width: 720px;
92
+ }
93
+
94
+ #three-header {
95
+ margin-bottom: 0.4rem !important;
96
+ filter: drop-shadow(0 14px 28px rgba(91, 82, 196, 0.18));
97
  }
98
 
99
  .logo-wrap {
100
  display: inline-flex;
101
  align-items: center;
102
  justify-content: center;
103
+ width: 62px;
104
+ height: 62px;
105
+ background: linear-gradient(135deg, #f2f0ff 0%, #ebe8ff 100%);
106
  border-radius: var(--radius-lg);
107
+ border: 1px solid rgba(91, 82, 196, 0.15);
108
  margin-bottom: 1rem;
109
+ box-shadow: var(--shadow-sm);
110
  }
111
 
112
+ .logo-wrap svg {
113
+ width: 30px;
114
+ height: 30px;
115
+ }
116
 
117
  header h1 {
118
+ font-size: clamp(2rem, 4vw, 2.6rem);
119
+ font-weight: 800;
120
  color: var(--text-primary);
121
+ letter-spacing: -0.04em;
122
+ line-height: 1.1;
123
  }
124
 
125
  header p {
126
+ font-size: 1rem;
127
  color: var(--text-secondary);
128
+ margin-top: 0.7rem;
129
+ max-width: 620px;
130
+ margin-left: auto;
131
+ margin-right: auto;
132
  }
133
 
134
  /* ── Main card ───────────────────────────────────────────── */
135
  main {
136
  width: 100%;
137
+ max-width: var(--max-width);
138
  }
139
 
140
  .card {
141
  background: var(--surface);
142
+ backdrop-filter: blur(16px);
143
+ -webkit-backdrop-filter: blur(16px);
144
  border-radius: var(--radius-xl);
145
+ border: 1px solid var(--border);
146
+ box-shadow: var(--shadow-lg);
147
  padding: 2rem;
148
+ position: relative;
149
+ overflow: hidden;
150
+ }
151
+
152
+ .card::before {
153
+ content: "";
154
+ position: absolute;
155
+ inset: 0 0 auto 0;
156
+ height: 1px;
157
+ background: linear-gradient(90deg, transparent, rgba(124, 115, 234, 0.35), transparent);
158
  }
159
 
160
  /* ── Drop zone ───────────────────────────────────────────── */
161
  #drop-zone {
162
+ border: 2px dashed rgba(91, 82, 196, 0.24);
163
+ border-radius: calc(var(--radius-lg) + 2px);
164
+ padding: 3.2rem 2rem;
165
  text-align: center;
166
  cursor: pointer;
167
+ transition: 0.25s ease;
168
+ background:
169
+ radial-gradient(circle at top, rgba(124, 115, 234, 0.08), transparent 45%),
170
+ var(--surface2);
171
  position: relative;
172
+ overflow: hidden;
173
+ }
174
+
175
+ #drop-zone::before {
176
+ content: "";
177
+ position: absolute;
178
+ inset: 0;
179
+ background: linear-gradient(135deg, rgba(124, 115, 234, 0.04), rgba(255, 255, 255, 0));
180
+ pointer-events: none;
181
  }
182
 
183
+ #drop-zone:hover,
184
+ #drop-zone.drag-over {
185
  border-color: var(--accent);
186
+ background:
187
+ radial-gradient(circle at top, rgba(124, 115, 234, 0.14), transparent 45%),
188
+ #f4f2ff;
189
+ transform: translateY(-2px);
190
+ box-shadow: 0 12px 32px rgba(91, 82, 196, 0.10);
191
  }
192
 
193
  #drop-zone input[type="file"] {
194
+ position: absolute;
195
+ inset: 0;
196
+ opacity: 0;
197
+ cursor: pointer;
198
+ width: 100%;
199
+ height: 100%;
200
  }
201
 
202
  .drop-icon {
203
+ width: 56px;
204
+ height: 56px;
205
  margin: 0 auto 1rem;
206
+ background: linear-gradient(135deg, #f0efff 0%, #e6e3ff 100%);
207
+ border-radius: 16px;
208
+ display: flex;
209
+ align-items: center;
210
+ justify-content: center;
211
+ border: 1px solid rgba(91, 82, 196, 0.16);
212
+ box-shadow: 0 10px 24px rgba(91, 82, 196, 0.10);
213
  }
214
 
215
+ .drop-icon svg {
216
+ width: 26px;
217
+ height: 26px;
218
+ }
219
 
220
  #drop-zone h2 {
221
+ font-size: 1.05rem;
222
+ font-weight: 700;
223
  color: var(--text-primary);
224
+ margin-bottom: 0.35rem;
225
  }
226
 
227
  #drop-zone p {
228
+ font-size: 0.92rem;
229
  color: var(--text-muted);
230
  }
231
 
 
237
  background: var(--amber-light);
238
  color: var(--amber-text);
239
  font-size: 12px;
240
+ font-weight: 700;
241
+ padding: 6px 12px;
242
+ border-radius: 999px;
243
+ margin-top: 0.95rem;
244
+ border: 1px solid rgba(200, 132, 30, 0.18);
245
+ box-shadow: 0 6px 16px rgba(200, 132, 30, 0.08);
246
  }
247
 
248
  /* ── Counter bar ─────────────────────────────────────────── */
 
250
  display: none;
251
  align-items: center;
252
  justify-content: space-between;
253
+ gap: 12px;
254
  margin-top: 1.25rem;
255
+ padding: 0.8rem 1rem;
256
+ background: rgba(248, 248, 252, 0.92);
257
  border-radius: var(--radius-md);
258
+ border: 1px solid rgba(91, 82, 196, 0.10);
259
  font-size: 13px;
260
  color: var(--text-secondary);
261
+ box-shadow: var(--shadow-sm);
262
  }
263
 
264
+ #counter-bar.visible {
265
+ display: flex;
266
+ }
267
 
268
  #counter-bar .count-num {
269
+ font-weight: 700;
270
  color: var(--text-primary);
271
  }
272
 
273
  .count-dot {
274
+ width: 8px;
275
+ height: 8px;
276
  border-radius: 50%;
277
  background: var(--success);
278
  display: inline-block;
279
+ margin-right: 6px;
280
+ box-shadow: 0 0 0 4px rgba(30, 166, 114, 0.12);
281
  }
282
 
283
+ .count-dot.warn {
284
+ background: var(--amber);
285
+ box-shadow: 0 0 0 4px rgba(200, 132, 30, 0.12);
286
+ }
287
+
288
+ .count-dot.danger {
289
+ background: var(--danger);
290
+ box-shadow: 0 0 0 4px rgba(226, 75, 74, 0.12);
291
+ }
292
 
293
  /* ── Image preview grid ──────────────────────────────────── */
294
  #preview-grid {
295
  display: grid;
296
+ grid-template-columns: repeat(auto-fill, minmax(115px, 1fr));
297
+ gap: 14px;
298
+ margin-top: 1.35rem;
299
  }
300
 
301
  .preview-item {
302
  position: relative;
303
  aspect-ratio: 1;
304
+ border-radius: 18px;
305
  overflow: hidden;
306
+ border: 1px solid rgba(91, 82, 196, 0.10);
307
+ background: linear-gradient(180deg, #fbfbff 0%, #f4f4fa 100%);
308
+ box-shadow: 0 12px 28px rgba(31, 35, 70, 0.08);
309
+ transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
310
+ }
311
+
312
+ .preview-item:hover {
313
+ transform: translateY(-4px);
314
+ box-shadow: 0 18px 36px rgba(31, 35, 70, 0.12);
315
+ border-color: rgba(91, 82, 196, 0.22);
316
  }
317
 
318
  .preview-item img {
319
+ width: 100%;
320
+ height: 100%;
321
  object-fit: cover;
322
  display: block;
323
  }
324
 
325
+ .preview-item::after {
326
+ content: "";
327
+ position: absolute;
328
+ inset: auto 0 0 0;
329
+ height: 40%;
330
+ background: linear-gradient(to top, rgba(0, 0, 0, 0.18), transparent);
331
+ pointer-events: none;
332
+ }
333
+
334
  .preview-item .remove-btn {
335
  position: absolute;
336
+ top: 8px;
337
+ right: 8px;
338
+ width: 28px;
339
+ height: 28px;
340
  border-radius: 50%;
341
+ background: rgba(19, 19, 25, 0.72);
342
+ backdrop-filter: blur(8px);
343
+ border: 1px solid rgba(255, 255, 255, 0.14);
344
  cursor: pointer;
345
+ display: flex;
346
+ align-items: center;
347
+ justify-content: center;
348
  opacity: 0;
349
+ transition: 0.18s ease;
350
+ z-index: 2;
351
  }
352
 
353
+ .preview-item:hover .remove-btn {
354
+ opacity: 1;
355
+ }
356
+
357
+ .preview-item .remove-btn:hover {
358
+ background: rgba(226, 75, 74, 0.92);
359
+ transform: scale(1.05);
360
+ }
361
 
362
  .preview-item .remove-btn svg {
363
+ width: 12px;
364
+ height: 12px;
365
  stroke: #fff;
366
  }
367
 
368
  .preview-item .order-badge {
369
  position: absolute;
370
+ bottom: 8px;
371
+ left: 8px;
372
+ background: rgba(19, 19, 25, 0.66);
373
+ backdrop-filter: blur(8px);
374
  color: #fff;
375
  font-size: 11px;
376
+ font-weight: 700;
377
+ padding: 3px 8px;
378
+ border-radius: 999px;
379
+ z-index: 2;
380
  }
381
 
382
  /* ── Actions ─────────────────────────────────────────────── */
383
  .actions {
384
  display: flex;
385
+ gap: 12px;
386
+ margin-top: 1.6rem;
387
  }
388
 
389
  button {
390
  font-family: inherit;
391
  cursor: pointer;
392
+ border-radius: 14px;
393
  font-size: 14px;
394
+ font-weight: 700;
395
+ padding: 12px 18px;
396
+ transition: 0.18s ease;
397
+ border: 1px solid var(--border-strong);
398
+ outline: none;
399
  }
400
 
401
+ button:focus-visible,
402
+ #drop-zone:focus-within {
403
+ box-shadow: 0 0 0 4px rgba(91, 82, 196, 0.14);
404
+ }
405
+
406
+ button:active {
407
+ transform: scale(0.98);
408
+ }
409
 
410
  .btn-primary {
411
+ background: linear-gradient(135deg, var(--accent) 0%, var(--accent-2) 100%);
412
  color: #fff;
413
  border-color: transparent;
414
  flex: 1;
415
+ display: flex;
416
+ align-items: center;
417
+ justify-content: center;
418
+ gap: 8px;
419
+ box-shadow: 0 14px 26px rgba(91, 82, 196, 0.22);
420
  }
421
 
422
+ .btn-primary:hover {
423
+ transform: translateY(-1px);
424
+ box-shadow: 0 18px 34px rgba(91, 82, 196, 0.28);
425
+ }
426
+
427
+ .btn-primary:disabled {
428
+ opacity: 0.5;
429
+ cursor: not-allowed;
430
+ transform: none;
431
+ box-shadow: none;
432
+ }
433
 
434
  .btn-ghost {
435
+ background: rgba(255, 255, 255, 0.75);
436
  color: var(--text-secondary);
437
+ border-color: rgba(91, 82, 196, 0.12);
438
+ backdrop-filter: blur(8px);
439
  }
440
 
441
  .btn-ghost:hover {
442
+ background: #fff;
443
  color: var(--text-primary);
444
+ border-color: rgba(91, 82, 196, 0.20);
445
  }
446
 
447
  /* ── Toast ───────────────────────────────────────────────── */
448
  #toast {
449
  position: fixed;
450
+ bottom: 1.6rem;
451
+ left: 50%;
452
+ transform: translateX(-50%) translateY(16px);
453
+ background: rgba(23, 23, 28, 0.92);
454
+ backdrop-filter: blur(14px);
455
  color: #fff;
456
  font-size: 13px;
457
+ font-weight: 600;
458
+ padding: 12px 18px;
459
+ border-radius: 999px;
460
  opacity: 0;
461
  pointer-events: none;
462
+ transition: opacity 0.25s ease, transform 0.25s ease;
463
  white-space: nowrap;
464
  z-index: 200;
465
+ box-shadow: 0 14px 32px rgba(0, 0, 0, 0.18);
466
  }
467
 
468
  #toast.show {
 
473
  /* ── Overlay + Premium dialog ────────────────────────────── */
474
  #overlay {
475
  display: none;
476
+ position: fixed;
477
+ inset: 0;
478
+ background: rgba(10, 11, 20, 0.52);
479
+ backdrop-filter: blur(8px);
480
  z-index: 100;
481
+ align-items: center;
482
+ justify-content: center;
483
  padding: 1rem;
484
  }
485
 
486
+ #overlay.show {
487
+ display: flex;
488
+ }
489
 
490
  #premium-dialog {
491
+ background: rgba(255, 255, 255, 0.96);
492
+ backdrop-filter: blur(16px);
493
+ border-radius: 28px;
494
+ border: 1px solid rgba(91, 82, 196, 0.12);
495
+ box-shadow: 0 30px 70px rgba(17, 20, 38, 0.22);
496
  padding: 2rem;
497
+ max-width: 430px;
498
  width: 100%;
499
  text-align: center;
500
  animation: pop-in 0.22s ease;
501
  }
502
 
503
  @keyframes pop-in {
504
+ from {
505
+ transform: scale(0.92) translateY(14px);
506
+ opacity: 0;
507
+ }
508
+ to {
509
+ transform: scale(1) translateY(0);
510
+ opacity: 1;
511
+ }
512
  }
513
 
514
  .dialog-icon {
515
+ width: 68px;
516
+ height: 68px;
517
+ border-radius: 20px;
518
+ background: linear-gradient(135deg, #fff5df 0%, #ffe7b8 100%);
519
+ display: flex;
520
+ align-items: center;
521
+ justify-content: center;
522
  margin: 0 auto 1.25rem;
523
+ border: 1px solid rgba(200, 132, 30, 0.18);
524
+ box-shadow: 0 12px 24px rgba(200, 132, 30, 0.12);
525
  }
526
 
527
+ .dialog-icon svg {
528
+ width: 30px;
529
+ height: 30px;
530
+ }
531
 
532
  #premium-dialog h2 {
533
+ font-size: 1.45rem;
534
+ font-weight: 800;
535
  margin-bottom: 0.5rem;
536
+ letter-spacing: -0.02em;
537
  }
538
 
539
  #premium-dialog p {
540
+ font-size: 0.95rem;
541
  color: var(--text-secondary);
542
+ margin-bottom: 1.4rem;
543
+ line-height: 1.7;
544
  }
545
 
546
  .perks {
547
  list-style: none;
548
  text-align: left;
549
+ margin-bottom: 1.7rem;
550
+ background: #fafaff;
551
+ border: 1px solid rgba(91, 82, 196, 0.08);
552
+ border-radius: 18px;
553
+ padding: 0.85rem 1rem;
554
  }
555
 
556
  .perks li {
 
558
  color: var(--text-secondary);
559
  display: flex;
560
  align-items: center;
561
+ gap: 10px;
562
+ padding: 8px 0;
563
+ }
564
+
565
+ .perks li + li {
566
+ border-top: 1px dashed rgba(91, 82, 196, 0.10);
567
  }
568
 
569
  .perk-check {
570
+ width: 20px;
571
+ height: 20px;
572
  border-radius: 50%;
573
  background: var(--success-light);
574
+ display: flex;
575
+ align-items: center;
576
+ justify-content: center;
577
  flex-shrink: 0;
578
  }
579
 
580
+ .perk-check svg {
581
+ width: 10px;
582
+ height: 10px;
583
+ stroke: var(--success);
584
+ }
585
 
586
  .dialog-actions {
587
+ display: flex;
588
+ flex-direction: column;
589
+ gap: 10px;
590
  }
591
 
592
  .btn-upgrade {
593
+ background: linear-gradient(135deg, #5b52c4 0%, #857cf0 100%);
594
  color: #fff;
595
  border: none;
596
+ padding: 13px;
597
  font-size: 15px;
598
+ border-radius: 14px;
599
  width: 100%;
600
+ box-shadow: 0 14px 26px rgba(91, 82, 196, 0.22);
601
  }
602
 
603
+ .btn-upgrade:hover {
604
+ transform: translateY(-1px);
605
+ opacity: 0.96;
606
+ }
607
 
608
  .btn-close-dialog {
609
+ background: rgba(255, 255, 255, 0.82);
610
+ border: 1px solid rgba(91, 82, 196, 0.14);
611
  color: var(--text-secondary);
612
+ padding: 11px;
613
  width: 100%;
614
+ border-radius: 14px;
615
+ }
616
+
617
+ .btn-close-dialog:hover {
618
+ background: #fff;
619
+ color: var(--text-primary);
620
  }
621
 
622
  /* ── Progress bar (inside btn) ───────────────────────────── */
623
  #loading-bar {
624
  display: none;
625
+ height: 4px;
626
+ background: rgba(255, 255, 255, 0.26);
627
+ border-radius: 999px;
628
  overflow: hidden;
629
  width: 120px;
630
  }
 
632
  #loading-bar-fill {
633
  height: 100%;
634
  background: #fff;
635
+ border-radius: 999px;
636
+ animation: slide 1s infinite ease-in-out;
637
  }
638
 
639
  @keyframes slide {
640
+ 0% {
641
+ width: 0%;
642
+ margin-left: 0;
643
+ }
644
+ 50% {
645
+ width: 60%;
646
+ margin-left: 20%;
647
+ }
648
+ 100% {
649
+ width: 0%;
650
+ margin-left: 100%;
651
+ }
652
+ }
653
+
654
+ /* ── Scrollbar ───────────────────────────────────────────── */
655
+ ::-webkit-scrollbar {
656
+ width: 10px;
657
+ height: 10px;
658
+ }
659
+
660
+ ::-webkit-scrollbar-thumb {
661
+ background: rgba(91, 82, 196, 0.20);
662
+ border-radius: 999px;
663
+ }
664
+
665
+ ::-webkit-scrollbar-track {
666
+ background: rgba(91, 82, 196, 0.05);
667
+ }
668
+
669
+ /* ── Responsive ─���────────────────────────────────────────── */
670
+ @media (max-width: 768px) {
671
+ body {
672
+ padding: 1.25rem 0.85rem 3rem;
673
+ }
674
+
675
+ .card {
676
+ padding: 1.2rem;
677
+ border-radius: 22px;
678
+ }
679
+
680
+ #drop-zone {
681
+ padding: 2.3rem 1rem;
682
+ }
683
+
684
+ .actions {
685
+ flex-direction: column;
686
+ }
687
+
688
+ .btn-ghost,
689
+ .btn-primary {
690
+ width: 100%;
691
+ }
692
+
693
+ #counter-bar {
694
+ flex-direction: column;
695
+ align-items: flex-start;
696
+ }
697
+
698
+ #preview-grid {
699
+ grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
700
+ gap: 10px;
701
+ }
702
+ }
703
+
704
+ @media (max-width: 480px) {
705
+ header h1 {
706
+ font-size: 1.85rem;
707
+ }
708
+
709
+ header p {
710
+ font-size: 0.92rem;
711
+ }
712
+
713
+ #premium-dialog {
714
+ padding: 1.3rem;
715
+ border-radius: 22px;
716
+ }
717
+
718
+ .dialog-icon {
719
+ width: 60px;
720
+ height: 60px;
721
+ }
722
+
723
+ #toast {
724
+ white-space: normal;
725
+ width: calc(100% - 24px);
726
+ text-align: center;
727
+ border-radius: 16px;
728
+ }
729
+ }