@narumitw/pi-image-drop 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,397 @@
1
+ :root {
2
+ color-scheme: light dark;
3
+ font-family:
4
+ Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
5
+ --bg: #f6f7fa;
6
+ --surface: #ffffff;
7
+ --surface-alt: #eef1f7;
8
+ --text: #172033;
9
+ --muted: #5c667a;
10
+ --line: #d6dbe6;
11
+ --accent: #3159d9;
12
+ --accent-strong: #2446b5;
13
+ --danger: #b42318;
14
+ --danger-bg: #fff0ee;
15
+ --success: #237a46;
16
+ --shadow: 0 10px 30px rgb(19 33 68 / 10%);
17
+ }
18
+
19
+ * {
20
+ box-sizing: border-box;
21
+ }
22
+ body {
23
+ margin: 0;
24
+ min-width: 280px;
25
+ background: var(--bg);
26
+ color: var(--text);
27
+ line-height: 1.5;
28
+ }
29
+ button,
30
+ input {
31
+ font: inherit;
32
+ }
33
+ button {
34
+ min-height: 44px;
35
+ border: 1px solid var(--line);
36
+ border-radius: 10px;
37
+ padding: 0.6rem 0.9rem;
38
+ background: var(--surface);
39
+ color: var(--text);
40
+ cursor: pointer;
41
+ }
42
+ button:hover:not(:disabled) {
43
+ border-color: var(--accent);
44
+ }
45
+ button:focus-visible,
46
+ summary:focus-visible,
47
+ .image-card:focus-visible {
48
+ outline: 3px solid color-mix(in srgb, var(--accent) 55%, transparent);
49
+ outline-offset: 3px;
50
+ }
51
+ button:disabled {
52
+ cursor: not-allowed;
53
+ opacity: 0.48;
54
+ }
55
+ button.primary {
56
+ border-color: var(--accent);
57
+ background: var(--accent);
58
+ color: white;
59
+ font-weight: 700;
60
+ }
61
+ button.primary:hover:not(:disabled) {
62
+ background: var(--accent-strong);
63
+ }
64
+ button.danger,
65
+ button.delete {
66
+ border-color: var(--danger);
67
+ color: white;
68
+ background: var(--danger);
69
+ }
70
+ button.danger-secondary {
71
+ color: var(--danger);
72
+ border-color: color-mix(in srgb, var(--danger) 45%, var(--line));
73
+ }
74
+
75
+ .page-header,
76
+ main {
77
+ width: min(1120px, calc(100% - 2rem));
78
+ margin-inline: auto;
79
+ }
80
+ .page-header {
81
+ display: flex;
82
+ align-items: end;
83
+ justify-content: space-between;
84
+ gap: 2rem;
85
+ padding: 2rem 0 1.2rem;
86
+ }
87
+ .eyebrow {
88
+ margin: 0 0 0.25rem;
89
+ color: var(--accent);
90
+ font-size: 0.78rem;
91
+ font-weight: 800;
92
+ letter-spacing: 0.08em;
93
+ text-transform: uppercase;
94
+ }
95
+ h1 {
96
+ margin: 0;
97
+ font-size: clamp(2rem, 5vw, 3.25rem);
98
+ line-height: 1.05;
99
+ }
100
+ .session-label {
101
+ margin: 0.5rem 0 0;
102
+ color: var(--muted);
103
+ }
104
+ details {
105
+ max-width: min(28rem, 100%);
106
+ }
107
+ summary {
108
+ min-height: 44px;
109
+ padding: 0.6rem;
110
+ cursor: pointer;
111
+ }
112
+ dl {
113
+ margin: 0.5rem 0 0;
114
+ }
115
+ dt {
116
+ color: var(--muted);
117
+ font-size: 0.8rem;
118
+ font-weight: 700;
119
+ }
120
+ dd {
121
+ margin: 0.2rem 0;
122
+ overflow-wrap: anywhere;
123
+ font-family: ui-monospace, monospace;
124
+ font-size: 0.8rem;
125
+ }
126
+
127
+ main {
128
+ padding-bottom: 3rem;
129
+ }
130
+ .drop-zone {
131
+ display: grid;
132
+ min-height: 260px;
133
+ place-items: center;
134
+ border: 2px dashed #9da7ba;
135
+ border-radius: 18px;
136
+ padding: 2rem;
137
+ background: var(--surface);
138
+ box-shadow: var(--shadow);
139
+ text-align: center;
140
+ transition:
141
+ border-color 0.15s,
142
+ background 0.15s,
143
+ transform 0.15s;
144
+ }
145
+ .drop-zone.drag-active {
146
+ border-color: var(--accent);
147
+ background: color-mix(in srgb, var(--accent) 8%, var(--surface));
148
+ transform: scale(1.006);
149
+ }
150
+ .drop-zone.disabled {
151
+ opacity: 0.66;
152
+ }
153
+ .drop-copy {
154
+ max-width: 36rem;
155
+ }
156
+ .drop-copy h2 {
157
+ margin: 0.4rem 0;
158
+ }
159
+ .drop-copy p {
160
+ margin: 0.25rem 0 1.25rem;
161
+ color: var(--muted);
162
+ }
163
+ .drop-icon {
164
+ font-size: 2.6rem;
165
+ }
166
+
167
+ .batch {
168
+ margin-top: 1.5rem;
169
+ }
170
+ .batch-toolbar {
171
+ display: flex;
172
+ align-items: center;
173
+ justify-content: space-between;
174
+ gap: 1rem;
175
+ margin-bottom: 0.8rem;
176
+ }
177
+ .batch-toolbar h2,
178
+ .batch-toolbar p {
179
+ margin: 0;
180
+ }
181
+ .batch-toolbar p {
182
+ color: var(--muted);
183
+ }
184
+ .banner {
185
+ margin: 0.75rem 0;
186
+ border-radius: 10px;
187
+ padding: 0.8rem 1rem;
188
+ }
189
+ .banner.error {
190
+ border: 1px solid color-mix(in srgb, var(--danger) 40%, var(--line));
191
+ background: var(--danger-bg);
192
+ color: var(--danger);
193
+ }
194
+ .image-grid {
195
+ display: grid;
196
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 245px), 1fr));
197
+ gap: 1rem;
198
+ }
199
+ .image-card {
200
+ display: grid;
201
+ grid-template-rows: 170px 1fr auto;
202
+ min-width: 0;
203
+ overflow: hidden;
204
+ border: 1px solid var(--line);
205
+ border-radius: 14px;
206
+ background: var(--surface);
207
+ box-shadow: 0 4px 16px rgb(19 33 68 / 7%);
208
+ }
209
+ .image-card.status-error {
210
+ border-color: color-mix(in srgb, var(--danger) 55%, var(--line));
211
+ }
212
+ .image-card.duplicate-highlight {
213
+ animation: duplicate 1.8s ease;
214
+ }
215
+ .preview {
216
+ display: grid;
217
+ overflow: hidden;
218
+ place-items: center;
219
+ background: var(--surface-alt);
220
+ }
221
+ .preview img {
222
+ width: 100%;
223
+ height: 100%;
224
+ object-fit: contain;
225
+ }
226
+ .placeholder {
227
+ display: grid;
228
+ width: 3rem;
229
+ height: 3rem;
230
+ place-items: center;
231
+ border-radius: 50%;
232
+ background: var(--surface);
233
+ color: var(--muted);
234
+ font-size: 1.4rem;
235
+ font-weight: 800;
236
+ }
237
+ .card-body {
238
+ min-width: 0;
239
+ padding: 0.85rem 0.9rem;
240
+ }
241
+ .card-body h3 {
242
+ margin: 0;
243
+ overflow: hidden;
244
+ text-overflow: ellipsis;
245
+ white-space: nowrap;
246
+ font-size: 1rem;
247
+ }
248
+ .card-body p {
249
+ margin: 0.3rem 0 0;
250
+ font-size: 0.82rem;
251
+ overflow-wrap: anywhere;
252
+ }
253
+ .meta,
254
+ .note {
255
+ color: var(--muted);
256
+ }
257
+ .conversion {
258
+ color: var(--success);
259
+ font-weight: 700;
260
+ }
261
+ .item-error {
262
+ color: var(--danger);
263
+ }
264
+ .card-actions {
265
+ display: flex;
266
+ flex-wrap: wrap;
267
+ gap: 0.4rem;
268
+ padding: 0 0.8rem 0.8rem;
269
+ }
270
+ .card-actions button {
271
+ flex: 1 1 auto;
272
+ padding-inline: 0.65rem;
273
+ }
274
+ .privacy {
275
+ max-width: 56rem;
276
+ margin: 1.5rem auto 0;
277
+ color: var(--muted);
278
+ text-align: center;
279
+ font-size: 0.9rem;
280
+ }
281
+
282
+ .connection-overlay {
283
+ position: fixed;
284
+ z-index: 20;
285
+ inset: 0;
286
+ display: grid;
287
+ place-items: center;
288
+ padding: 1rem;
289
+ background: rgb(11 17 30 / 78%);
290
+ }
291
+ .connection-overlay[hidden] {
292
+ display: none;
293
+ }
294
+ .connection-overlay > div {
295
+ width: min(30rem, 100%);
296
+ border-radius: 16px;
297
+ padding: 1.5rem;
298
+ background: var(--surface);
299
+ box-shadow: var(--shadow);
300
+ }
301
+ .connection-overlay h2 {
302
+ margin-top: 0;
303
+ }
304
+ dialog {
305
+ max-width: min(28rem, calc(100% - 2rem));
306
+ border: 1px solid var(--line);
307
+ border-radius: 16px;
308
+ padding: 1.5rem;
309
+ background: var(--surface);
310
+ color: var(--text);
311
+ }
312
+ dialog::backdrop {
313
+ background: rgb(11 17 30 / 60%);
314
+ }
315
+ .dialog-actions {
316
+ display: flex;
317
+ justify-content: flex-end;
318
+ gap: 0.7rem;
319
+ margin-top: 1.4rem;
320
+ }
321
+
322
+ @keyframes duplicate {
323
+ 0%,
324
+ 100% {
325
+ box-shadow: 0 4px 16px rgb(19 33 68 / 7%);
326
+ }
327
+ 20%,
328
+ 70% {
329
+ box-shadow: 0 0 0 5px color-mix(in srgb, var(--accent) 45%, transparent);
330
+ }
331
+ }
332
+ @media (prefers-color-scheme: dark) {
333
+ :root {
334
+ --bg: #10131a;
335
+ --surface: #181d27;
336
+ --surface-alt: #232a37;
337
+ --text: #edf1f8;
338
+ --muted: #aeb7c8;
339
+ --line: #394254;
340
+ --accent: #8da7ff;
341
+ --accent-strong: #6f8ef3;
342
+ --danger: #ff8c84;
343
+ --danger-bg: #321c1d;
344
+ --success: #72d39b;
345
+ --shadow: 0 12px 32px rgb(0 0 0 / 30%);
346
+ }
347
+ button.primary {
348
+ color: #10131a;
349
+ }
350
+ button.danger {
351
+ color: #18100f;
352
+ }
353
+ }
354
+ @media (max-width: 620px) {
355
+ .page-header {
356
+ align-items: start;
357
+ flex-direction: column;
358
+ gap: 0.5rem;
359
+ padding-top: 1.25rem;
360
+ }
361
+ .page-header,
362
+ main {
363
+ width: min(100% - 1rem, 1120px);
364
+ }
365
+ .drop-zone {
366
+ min-height: 210px;
367
+ padding: 1rem;
368
+ }
369
+ .batch-toolbar {
370
+ align-items: start;
371
+ }
372
+ .image-grid {
373
+ grid-template-columns: 1fr;
374
+ }
375
+ .image-card {
376
+ grid-template-columns: 112px 1fr;
377
+ grid-template-rows: auto auto;
378
+ }
379
+ .preview {
380
+ grid-row: 1 / 3;
381
+ min-height: 150px;
382
+ }
383
+ .card-actions {
384
+ padding-top: 0.8rem;
385
+ }
386
+ }
387
+ @media (prefers-reduced-motion: reduce) {
388
+ * {
389
+ scroll-behavior: auto;
390
+ }
391
+ .image-card.duplicate-highlight {
392
+ animation: none;
393
+ }
394
+ .drop-zone {
395
+ transition: none;
396
+ }
397
+ }