@rozenite/sqlite-plugin 1.7.0-rc.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +20 -0
  3. package/README.md +102 -0
  4. package/dist/devtools/assets/panel-B3paLkwG.js +82 -0
  5. package/dist/devtools/assets/panel-CIU0JBOs.css +1 -0
  6. package/dist/devtools/panel.html +31 -0
  7. package/dist/react-native/chunks/bridge-values.cjs +5 -0
  8. package/dist/react-native/chunks/bridge-values.js +258 -0
  9. package/dist/react-native/chunks/index.require.cjs +1 -0
  10. package/dist/react-native/chunks/index.require.js +118 -0
  11. package/dist/react-native/chunks/useRozeniteSqlitePlugin.require.cjs +1 -0
  12. package/dist/react-native/chunks/useRozeniteSqlitePlugin.require.js +189 -0
  13. package/dist/react-native/index.cjs +1 -0
  14. package/dist/react-native/index.d.ts +178 -0
  15. package/dist/react-native/index.js +16 -0
  16. package/dist/rozenite.json +1 -0
  17. package/package.json +83 -0
  18. package/postcss.config.js +6 -0
  19. package/react-native.ts +55 -0
  20. package/rozenite.config.ts +8 -0
  21. package/src/react-native/adapters/__tests__/expo-sqlite.test.ts +94 -0
  22. package/src/react-native/adapters/expo-sqlite.ts +230 -0
  23. package/src/react-native/adapters/generic.ts +88 -0
  24. package/src/react-native/adapters/index.ts +9 -0
  25. package/src/react-native/sqlite-view.ts +24 -0
  26. package/src/react-native/useRozeniteSqlitePlugin.ts +262 -0
  27. package/src/shared/__tests__/bridge-values.test.ts +34 -0
  28. package/src/shared/__tests__/sql.test.ts +55 -0
  29. package/src/shared/bridge-values.ts +170 -0
  30. package/src/shared/protocol.ts +41 -0
  31. package/src/shared/sql.ts +420 -0
  32. package/src/shared/types.ts +81 -0
  33. package/src/ui/__tests__/sql-editor-utils.test.ts +135 -0
  34. package/src/ui/__tests__/sqlite-row-edit-value.test.ts +22 -0
  35. package/src/ui/__tests__/sqlite-row-mutations.test.ts +310 -0
  36. package/src/ui/__tests__/sqlite-table-column-order.test.ts +83 -0
  37. package/src/ui/__tests__/value-utils.test.tsx +12 -0
  38. package/src/ui/cell-detail-drawer.tsx +65 -0
  39. package/src/ui/globals.css +1415 -0
  40. package/src/ui/panel.tsx +2815 -0
  41. package/src/ui/query-result-table.tsx +199 -0
  42. package/src/ui/sql-editor-utils.ts +352 -0
  43. package/src/ui/sql-editor.tsx +509 -0
  44. package/src/ui/sqlite-data-table.tsx +296 -0
  45. package/src/ui/sqlite-introspection.ts +189 -0
  46. package/src/ui/sqlite-modal-controls.tsx +32 -0
  47. package/src/ui/sqlite-row-delete-modal.tsx +130 -0
  48. package/src/ui/sqlite-row-edit-modal.tsx +487 -0
  49. package/src/ui/sqlite-row-edit-value.ts +53 -0
  50. package/src/ui/sqlite-row-mutations.ts +246 -0
  51. package/src/ui/sqlite-table-column-order.ts +154 -0
  52. package/src/ui/use-sqlite-requests.ts +205 -0
  53. package/src/ui/utils.ts +107 -0
  54. package/src/ui/value-utils.tsx +162 -0
  55. package/tsconfig.json +36 -0
  56. package/vite.config.ts +20 -0
@@ -0,0 +1,1415 @@
1
+ @import 'tailwindcss';
2
+ @import '@heroui/styles';
3
+
4
+ @layer theme {
5
+ :root {
6
+ --radius: 0.875rem;
7
+ --sqlite-bg: #07111a;
8
+ --sqlite-bg-soft: #0b1722;
9
+ --sqlite-surface: rgba(12, 23, 35, 0.9);
10
+ --sqlite-surface-strong: rgba(14, 28, 44, 0.96);
11
+ --sqlite-surface-muted: rgba(19, 35, 53, 0.76);
12
+ --sqlite-line: rgba(167, 194, 220, 0.14);
13
+ --sqlite-line-strong: rgba(167, 194, 220, 0.24);
14
+ --sqlite-text: rgba(243, 248, 252, 0.96);
15
+ --sqlite-muted: rgba(165, 185, 204, 0.86);
16
+ --sqlite-muted-soft: rgba(165, 185, 204, 0.58);
17
+ --sqlite-accent: #8232ff;
18
+ --sqlite-accent-strong: #6921d6;
19
+ --sqlite-accent-soft: rgba(130, 50, 255, 0.14);
20
+ --sqlite-success: #4fce92;
21
+ --sqlite-success-soft: rgba(79, 206, 146, 0.16);
22
+ --sqlite-warning: #ffbf69;
23
+ --sqlite-warning-soft: rgba(255, 191, 105, 0.14);
24
+ --sqlite-danger: #ff7b7b;
25
+ --sqlite-danger-soft: rgba(255, 123, 123, 0.14);
26
+ --sqlite-shadow: 0 24px 64px rgba(2, 8, 16, 0.42);
27
+ }
28
+ }
29
+
30
+ @layer base {
31
+ html,
32
+ body,
33
+ #root {
34
+ min-height: 100%;
35
+ }
36
+
37
+ html {
38
+ color-scheme: dark;
39
+ }
40
+
41
+ body {
42
+ margin: 0;
43
+ font-size: 14px;
44
+ font-family:
45
+ 'IBM Plex Sans', 'Satoshi', 'Inter', ui-sans-serif, system-ui, sans-serif;
46
+ background:
47
+ radial-gradient(
48
+ circle at top left,
49
+ rgba(130, 50, 255, 0.18),
50
+ transparent 22%
51
+ ),
52
+ radial-gradient(
53
+ circle at right,
54
+ rgba(70, 193, 190, 0.08),
55
+ transparent 18%
56
+ ),
57
+ linear-gradient(180deg, #07111a 0%, #091520 52%, #07111a 100%);
58
+ color: var(--sqlite-text);
59
+ text-rendering: optimizeLegibility;
60
+ -webkit-font-smoothing: antialiased;
61
+ -moz-osx-font-smoothing: grayscale;
62
+ }
63
+
64
+ *,
65
+ *::before,
66
+ *::after {
67
+ box-sizing: border-box;
68
+ }
69
+
70
+ button,
71
+ input,
72
+ select,
73
+ textarea {
74
+ font: inherit;
75
+ }
76
+
77
+ code,
78
+ pre,
79
+ textarea,
80
+ .sqlite-select,
81
+ .sqlite-tabular,
82
+ .sqlite-editor-shell .cm-scroller,
83
+ .sqlite-editor-shell .cm-gutters {
84
+ font-family:
85
+ 'IBM Plex Mono', 'JetBrains Mono', 'SFMono-Regular', ui-monospace,
86
+ monospace;
87
+ font-variant-numeric: tabular-nums;
88
+ }
89
+ }
90
+
91
+ @utility wrap-anywhere {
92
+ overflow-wrap: anywhere;
93
+ }
94
+
95
+ @layer components {
96
+ .sqlite-app-shell {
97
+ min-height: 100vh;
98
+ min-height: 100dvh;
99
+ height: 100vh;
100
+ height: 100dvh;
101
+ padding: 0.5rem;
102
+ }
103
+
104
+ .sqlite-skip-link {
105
+ position: absolute;
106
+ left: 1rem;
107
+ top: -3rem;
108
+ z-index: 60;
109
+ border-radius: 999px;
110
+ border: 1px solid var(--sqlite-line-strong);
111
+ background: rgba(12, 27, 41, 0.98);
112
+ color: white;
113
+ padding: 0.65rem 1rem;
114
+ text-decoration: none;
115
+ transition:
116
+ top 160ms ease,
117
+ opacity 160ms ease;
118
+ opacity: 0;
119
+ }
120
+
121
+ .sqlite-skip-link:focus-visible {
122
+ top: 1rem;
123
+ opacity: 1;
124
+ }
125
+
126
+ .sqlite-topbar,
127
+ .sqlite-sidebar-panel,
128
+ .sqlite-workspace-panel {
129
+ position: relative;
130
+ overflow: hidden;
131
+ border: 1px solid var(--sqlite-line);
132
+ border-radius: 1.5rem;
133
+ background:
134
+ linear-gradient(180deg, rgba(13, 24, 36, 0.96), rgba(8, 17, 26, 0.96)),
135
+ radial-gradient(circle at top, rgba(130, 50, 255, 0.08), transparent 34%);
136
+ box-shadow: var(--sqlite-shadow);
137
+ backdrop-filter: blur(18px);
138
+ }
139
+
140
+ .sqlite-topbar::before,
141
+ .sqlite-sidebar-panel::before,
142
+ .sqlite-workspace-panel::before {
143
+ content: '';
144
+ position: absolute;
145
+ inset: 0;
146
+ pointer-events: none;
147
+ border-radius: inherit;
148
+ background: linear-gradient(
149
+ 180deg,
150
+ rgba(255, 255, 255, 0.05),
151
+ transparent 18%
152
+ );
153
+ }
154
+
155
+ .sqlite-topbar {
156
+ display: grid;
157
+ grid-template-columns: minmax(0, 1.2fr) minmax(18rem, 0.8fr) minmax(
158
+ 0,
159
+ 1.2fr
160
+ );
161
+ gap: 0.9rem;
162
+ align-items: center;
163
+ padding: 0.9rem 1rem;
164
+ min-height: 4.5rem;
165
+ }
166
+
167
+ .sqlite-topbar-section {
168
+ display: flex;
169
+ align-items: center;
170
+ gap: 0.75rem;
171
+ min-width: 0;
172
+ }
173
+
174
+ .sqlite-topbar-search {
175
+ justify-content: center;
176
+ }
177
+
178
+ .sqlite-brand {
179
+ display: flex;
180
+ align-items: center;
181
+ gap: 0.85rem;
182
+ min-width: 0;
183
+ }
184
+
185
+ .sqlite-brand-mark {
186
+ display: inline-flex;
187
+ align-items: center;
188
+ justify-content: center;
189
+ width: 2.5rem;
190
+ height: 2.5rem;
191
+ border-radius: 0.95rem;
192
+ border: 1px solid rgba(130, 50, 255, 0.28);
193
+ background: linear-gradient(
194
+ 180deg,
195
+ rgba(130, 50, 255, 0.24),
196
+ rgba(105, 33, 214, 0.18)
197
+ );
198
+ color: white;
199
+ }
200
+
201
+ .sqlite-brand-title {
202
+ margin: 0;
203
+ font-size: 0.98rem;
204
+ font-weight: 600;
205
+ text-wrap: balance;
206
+ }
207
+
208
+ .sqlite-brand-subtitle {
209
+ margin: 0.1rem 0 0;
210
+ color: var(--sqlite-muted-soft);
211
+ font-size: 0.76rem;
212
+ text-transform: uppercase;
213
+ letter-spacing: 0.12em;
214
+ }
215
+
216
+ .sqlite-topbar-meta,
217
+ .sqlite-toolbar-actions,
218
+ .sqlite-subtoolbar-group,
219
+ .sqlite-status-cluster,
220
+ .sqlite-editor-pills,
221
+ .sqlite-chip-row,
222
+ .sqlite-inline-metadata {
223
+ display: flex;
224
+ align-items: center;
225
+ gap: 0.6rem;
226
+ min-width: 0;
227
+ flex-wrap: wrap;
228
+ }
229
+
230
+ .sqlite-topbar-meta {
231
+ justify-content: flex-end;
232
+ }
233
+
234
+ .sqlite-input,
235
+ .sqlite-select {
236
+ width: 100%;
237
+ border: 1px solid var(--sqlite-line);
238
+ border-radius: 0.95rem;
239
+ background: linear-gradient(
240
+ 180deg,
241
+ rgba(10, 18, 29, 0.98),
242
+ rgba(11, 22, 34, 0.98)
243
+ );
244
+ color: var(--sqlite-text);
245
+ box-shadow:
246
+ inset 0 1px 0 rgba(255, 255, 255, 0.025),
247
+ 0 10px 24px rgba(0, 0, 0, 0.14);
248
+ transition:
249
+ border-color 140ms ease,
250
+ box-shadow 140ms ease,
251
+ background-color 140ms ease,
252
+ transform 140ms ease;
253
+ }
254
+
255
+ .sqlite-input,
256
+ .sqlite-select {
257
+ min-height: 2.5rem;
258
+ padding: 0.62rem 0.85rem;
259
+ line-height: 1.25;
260
+ }
261
+
262
+ .sqlite-input::placeholder,
263
+ .sqlite-editor-shell .cm-placeholder {
264
+ color: rgba(165, 185, 204, 0.5);
265
+ }
266
+
267
+ .sqlite-input:focus-visible,
268
+ .sqlite-select:focus-visible,
269
+ .sqlite-chip:focus-visible,
270
+ .sqlite-icon-button:focus-visible,
271
+ .sqlite-button:focus-visible,
272
+ .sqlite-workspace-tab:focus-visible,
273
+ .sqlite-section-tab:focus-visible,
274
+ .sqlite-cell-button:focus-visible,
275
+ .sqlite-connection-row:focus-visible,
276
+ .sqlite-schema-row:focus-visible,
277
+ .sqlite-object-row:focus-visible {
278
+ outline: 2px solid transparent;
279
+ border-color: rgba(130, 50, 255, 0.54);
280
+ box-shadow:
281
+ 0 0 0 2px rgba(130, 50, 255, 0.18),
282
+ 0 0 0 4px rgba(130, 50, 255, 0.08);
283
+ }
284
+
285
+ .sqlite-select {
286
+ appearance: none;
287
+ background-image:
288
+ linear-gradient(45deg, transparent 50%, rgba(165, 185, 204, 0.8) 50%),
289
+ linear-gradient(135deg, rgba(165, 185, 204, 0.8) 50%, transparent 50%);
290
+ background-position:
291
+ calc(100% - 18px) calc(50% - 2px),
292
+ calc(100% - 12px) calc(50% - 2px);
293
+ background-size:
294
+ 6px 6px,
295
+ 6px 6px;
296
+ background-repeat: no-repeat;
297
+ padding-right: 2.7rem;
298
+ }
299
+
300
+ .sqlite-input-with-icon {
301
+ position: relative;
302
+ display: flex;
303
+ align-items: center;
304
+ min-width: 0;
305
+ }
306
+
307
+ .sqlite-input-with-icon > svg {
308
+ position: absolute;
309
+ left: 0.85rem;
310
+ color: var(--sqlite-muted-soft);
311
+ pointer-events: none;
312
+ }
313
+
314
+ .sqlite-input-with-icon .sqlite-input {
315
+ padding-left: 2.55rem;
316
+ }
317
+
318
+ .sqlite-input-search {
319
+ width: min(100%, 30rem);
320
+ }
321
+
322
+ .sqlite-button,
323
+ .sqlite-chip,
324
+ .sqlite-icon-button,
325
+ .sqlite-workspace-tab,
326
+ .sqlite-section-tab,
327
+ .sqlite-connection-row,
328
+ .sqlite-schema-row,
329
+ .sqlite-object-row {
330
+ touch-action: manipulation;
331
+ -webkit-tap-highlight-color: rgba(130, 50, 255, 0.2);
332
+ cursor: pointer;
333
+ }
334
+
335
+ .sqlite-button {
336
+ border: 1px solid var(--sqlite-line);
337
+ cursor: pointer;
338
+ transition:
339
+ border-color 140ms ease,
340
+ background-color 140ms ease,
341
+ box-shadow 140ms ease,
342
+ transform 140ms ease,
343
+ color 140ms ease;
344
+ }
345
+
346
+ .sqlite-button:disabled,
347
+ .sqlite-icon-button:disabled,
348
+ .sqlite-chip:disabled,
349
+ .sqlite-cell-button:disabled {
350
+ cursor: not-allowed;
351
+ opacity: 0.45;
352
+ }
353
+
354
+ .sqlite-button-primary {
355
+ border-color: rgba(130, 50, 255, 0.3);
356
+ background: linear-gradient(
357
+ 180deg,
358
+ rgba(130, 50, 255, 0.98),
359
+ rgba(105, 33, 214, 0.94)
360
+ );
361
+ color: white;
362
+ box-shadow: 0 12px 32px rgba(72, 28, 142, 0.3);
363
+ }
364
+
365
+ .sqlite-button-primary:hover:not(:disabled) {
366
+ background: linear-gradient(
367
+ 180deg,
368
+ rgba(145, 74, 255, 0.98),
369
+ rgba(114, 42, 227, 0.96)
370
+ );
371
+ }
372
+
373
+ .sqlite-button-secondary,
374
+ .sqlite-button-ghost,
375
+ .sqlite-icon-button,
376
+ .sqlite-chip,
377
+ .sqlite-workspace-tab,
378
+ .sqlite-section-tab {
379
+ border: 1px solid var(--sqlite-line);
380
+ background: rgba(255, 255, 255, 0.035);
381
+ color: rgba(238, 246, 252, 0.9);
382
+ }
383
+
384
+ .sqlite-button-secondary:hover:not(:disabled),
385
+ .sqlite-button-ghost:hover:not(:disabled),
386
+ .sqlite-icon-button:hover:not(:disabled),
387
+ .sqlite-chip:hover:not(:disabled),
388
+ .sqlite-workspace-tab:hover,
389
+ .sqlite-section-tab:hover {
390
+ border-color: var(--sqlite-line-strong);
391
+ background: rgba(255, 255, 255, 0.07);
392
+ color: white;
393
+ }
394
+
395
+ .sqlite-icon-button {
396
+ width: 2.5rem;
397
+ height: 2.5rem;
398
+ justify-content: center;
399
+ flex-shrink: 0;
400
+ }
401
+
402
+ .sqlite-badge,
403
+ .sqlite-chip,
404
+ .sqlite-count-pill {
405
+ display: inline-flex;
406
+ align-items: center;
407
+ gap: 0.35rem;
408
+ min-width: 0;
409
+ padding: 0.35rem 0.65rem;
410
+ border-radius: 999px;
411
+ font-size: 0.72rem;
412
+ font-weight: 600;
413
+ letter-spacing: 0.06em;
414
+ text-transform: uppercase;
415
+ line-height: 1;
416
+ }
417
+
418
+ .sqlite-badge-neutral,
419
+ .sqlite-count-pill,
420
+ .sqlite-chip,
421
+ .sqlite-chip-static {
422
+ border: 1px solid var(--sqlite-line);
423
+ background: rgba(255, 255, 255, 0.04);
424
+ color: rgba(231, 241, 249, 0.86);
425
+ }
426
+
427
+ .sqlite-badge-accent {
428
+ border: 1px solid rgba(130, 50, 255, 0.3);
429
+ background: rgba(130, 50, 255, 0.14);
430
+ color: rgba(222, 237, 255, 0.95);
431
+ }
432
+
433
+ .sqlite-badge-success {
434
+ border: 1px solid rgba(79, 206, 146, 0.28);
435
+ background: var(--sqlite-success-soft);
436
+ color: rgba(203, 249, 225, 0.95);
437
+ }
438
+
439
+ .sqlite-badge-warning {
440
+ border: 1px solid rgba(255, 191, 105, 0.26);
441
+ background: var(--sqlite-warning-soft);
442
+ color: rgba(255, 232, 196, 0.95);
443
+ }
444
+
445
+ .sqlite-app-body {
446
+ display: flex;
447
+ gap: 0.5rem;
448
+ min-height: 0;
449
+ height: calc(100vh - 1rem);
450
+ height: calc(100dvh - 1rem);
451
+ }
452
+
453
+ .sqlite-sidebar-wrap {
454
+ display: flex;
455
+ gap: 0.35rem;
456
+ min-width: 4.5rem;
457
+ min-height: 0;
458
+ height: 100%;
459
+ max-width: min(26rem, 45vw);
460
+ }
461
+
462
+ .sqlite-sidebar-panel,
463
+ .sqlite-workspace-panel {
464
+ display: flex;
465
+ flex-direction: column;
466
+ min-height: 0;
467
+ flex: 1;
468
+ height: 100%;
469
+ }
470
+
471
+ .sqlite-sidebar-header,
472
+ .sqlite-workspace-header,
473
+ .sqlite-sidebar-toolbar,
474
+ .sqlite-subtoolbar,
475
+ .sqlite-results-header,
476
+ .sqlite-object-header,
477
+ .sqlite-status-footer {
478
+ position: relative;
479
+ z-index: 1;
480
+ padding: 0.6rem 0.7rem;
481
+ border-bottom: 1px solid var(--sqlite-line);
482
+ }
483
+
484
+ .sqlite-status-footer {
485
+ border-bottom: 0;
486
+ border-top: 1px solid var(--sqlite-line);
487
+ }
488
+
489
+ .sqlite-sidebar-header,
490
+ .sqlite-workspace-header,
491
+ .sqlite-subtoolbar,
492
+ .sqlite-results-header,
493
+ .sqlite-object-header,
494
+ .sqlite-status-footer {
495
+ display: flex;
496
+ align-items: center;
497
+ justify-content: space-between;
498
+ gap: 0.6rem;
499
+ flex-wrap: wrap;
500
+ }
501
+
502
+ .sqlite-sidebar-header,
503
+ .sqlite-sidebar-toolbar {
504
+ padding-inline: 0.7rem;
505
+ }
506
+
507
+ .sqlite-sidebar-scroll,
508
+ .sqlite-workspace-content,
509
+ .sqlite-results-scroll,
510
+ .sqlite-editor-gutter {
511
+ min-height: 0;
512
+ overflow: auto;
513
+ }
514
+
515
+ .sqlite-sidebar-scroll {
516
+ flex: 1;
517
+ padding: 0.55rem;
518
+ }
519
+
520
+ .sqlite-sidebar-skeleton,
521
+ .sqlite-structure-skeleton,
522
+ .sqlite-results-loading {
523
+ display: grid;
524
+ gap: 0.75rem;
525
+ }
526
+
527
+ .sqlite-sidebar-skeleton-row,
528
+ .sqlite-structure-skeleton-row,
529
+ .sqlite-results-loading-bar {
530
+ position: relative;
531
+ overflow: hidden;
532
+ border-radius: 0.9rem;
533
+ background: rgba(255, 255, 255, 0.06);
534
+ }
535
+
536
+ .sqlite-sidebar-skeleton-row {
537
+ height: 3.1rem;
538
+ }
539
+
540
+ .sqlite-structure-skeleton-row {
541
+ height: 4.5rem;
542
+ }
543
+
544
+ .sqlite-results-loading-row {
545
+ display: grid;
546
+ gap: 0.75rem;
547
+ padding: 0.85rem 0.9rem;
548
+ border-radius: 1rem;
549
+ border: 1px solid var(--sqlite-line);
550
+ background: rgba(255, 255, 255, 0.03);
551
+ }
552
+
553
+ .sqlite-results-loading-bar {
554
+ height: 0.9rem;
555
+ }
556
+
557
+ .sqlite-sidebar-skeleton-row::after,
558
+ .sqlite-structure-skeleton-row::after,
559
+ .sqlite-results-loading-bar::after {
560
+ content: '';
561
+ position: absolute;
562
+ inset: 0;
563
+ transform: translateX(-100%);
564
+ background: linear-gradient(
565
+ 90deg,
566
+ transparent,
567
+ rgba(255, 255, 255, 0.12),
568
+ transparent
569
+ );
570
+ animation: sqlite-shimmer 1.2s linear infinite;
571
+ }
572
+
573
+ .sqlite-sidebar-resizer {
574
+ width: 0.4rem;
575
+ border-radius: 999px;
576
+ background: rgba(255, 255, 255, 0.04);
577
+ cursor: col-resize;
578
+ }
579
+
580
+ .sqlite-sidebar-resizer:hover {
581
+ background: rgba(130, 50, 255, 0.2);
582
+ }
583
+
584
+ .sqlite-workspace {
585
+ min-width: 0;
586
+ flex: 1;
587
+ display: flex;
588
+ min-height: 0;
589
+ }
590
+
591
+ .sqlite-workspace-header {
592
+ align-items: center;
593
+ }
594
+
595
+ .sqlite-workspace-tabs,
596
+ .sqlite-section-tabs {
597
+ display: inline-flex;
598
+ align-items: center;
599
+ gap: 0.35rem;
600
+ padding: 0.2rem;
601
+ border-radius: 0.85rem;
602
+ border: 1px solid var(--sqlite-line);
603
+ background: rgba(255, 255, 255, 0.03);
604
+ }
605
+
606
+ .sqlite-workspace-tab,
607
+ .sqlite-section-tab {
608
+ border-radius: 0.7rem;
609
+ padding: 0.5rem 0.75rem;
610
+ font-size: 0.9rem;
611
+ font-weight: 600;
612
+ }
613
+
614
+ .sqlite-workspace-tab.is-active,
615
+ .sqlite-section-tab.is-active {
616
+ border-color: rgba(130, 50, 255, 0.28);
617
+ background: var(--sqlite-accent-soft);
618
+ color: white;
619
+ }
620
+
621
+ .sqlite-workspace-content {
622
+ padding: 0.5rem;
623
+ display: flex;
624
+ flex: 1;
625
+ min-height: 0;
626
+ height: 100%;
627
+ }
628
+
629
+ .sqlite-empty-state {
630
+ display: grid;
631
+ place-items: center;
632
+ gap: 1rem;
633
+ min-height: 100%;
634
+ border: 1px dashed var(--sqlite-line);
635
+ border-radius: 1.2rem;
636
+ background: rgba(255, 255, 255, 0.02);
637
+ padding: 1.5rem;
638
+ }
639
+
640
+ .sqlite-empty-state-icon {
641
+ display: inline-flex;
642
+ align-items: center;
643
+ justify-content: center;
644
+ width: 3.2rem;
645
+ height: 3.2rem;
646
+ border-radius: 1rem;
647
+ border: 1px solid var(--sqlite-line);
648
+ background: rgba(255, 255, 255, 0.03);
649
+ color: var(--sqlite-muted);
650
+ }
651
+
652
+ .sqlite-eyebrow {
653
+ margin: 0;
654
+ color: var(--sqlite-muted-soft);
655
+ font-size: 0.72rem;
656
+ letter-spacing: 0.14em;
657
+ text-transform: uppercase;
658
+ font-weight: 600;
659
+ }
660
+
661
+ .sqlite-helper-text {
662
+ margin: 0.2rem 0 0;
663
+ color: var(--sqlite-muted);
664
+ font-size: 0.82rem;
665
+ line-height: 1.45;
666
+ }
667
+
668
+ .sqlite-section-title,
669
+ .sqlite-detail-card-title {
670
+ margin: 0;
671
+ font-size: 0.94rem;
672
+ font-weight: 600;
673
+ text-wrap: balance;
674
+ }
675
+
676
+ .sqlite-field {
677
+ display: grid;
678
+ gap: 0.35rem;
679
+ min-width: 0;
680
+ }
681
+
682
+ .sqlite-field label {
683
+ color: var(--sqlite-muted-soft);
684
+ font-size: 0.72rem;
685
+ letter-spacing: 0.08em;
686
+ text-transform: uppercase;
687
+ font-weight: 600;
688
+ }
689
+
690
+ .sqlite-field-compact {
691
+ min-width: min(14rem, 100%);
692
+ }
693
+
694
+ .sqlite-field-inline {
695
+ display: flex;
696
+ align-items: center;
697
+ gap: 0.5rem;
698
+ min-width: auto;
699
+ }
700
+
701
+ .sqlite-field-inline label {
702
+ white-space: nowrap;
703
+ }
704
+
705
+ .sqlite-field-inline .sqlite-select {
706
+ width: auto;
707
+ min-width: 5.5rem;
708
+ }
709
+
710
+ .sqlite-field-grow {
711
+ flex: 1 1 auto;
712
+ }
713
+
714
+ .sqlite-subtoolbar-group-grow {
715
+ flex: 1 1 20rem;
716
+ }
717
+
718
+ .sqlite-subtoolbar-group-grow .sqlite-field {
719
+ width: 100%;
720
+ }
721
+
722
+ .sqlite-content-stack,
723
+ .sqlite-query-layout,
724
+ .sqlite-query-editor-pane,
725
+ .sqlite-query-results-pane,
726
+ .sqlite-main-pane,
727
+ .sqlite-editor-frame,
728
+ .sqlite-results-panel,
729
+ .sqlite-structure-panel {
730
+ display: flex;
731
+ flex-direction: column;
732
+ min-height: 0;
733
+ flex: 1;
734
+ }
735
+
736
+ .sqlite-query-layout,
737
+ .sqlite-content-stack,
738
+ .sqlite-main-pane,
739
+ .sqlite-structure-panel,
740
+ .sqlite-results-panel,
741
+ .sqlite-editor-frame {
742
+ border: 1px solid var(--sqlite-line);
743
+ border-radius: 1.25rem;
744
+ background: linear-gradient(
745
+ 180deg,
746
+ rgba(10, 18, 29, 0.98),
747
+ rgba(8, 15, 24, 0.98)
748
+ );
749
+ }
750
+
751
+ .sqlite-content-stack,
752
+ .sqlite-main-stack,
753
+ .sqlite-main-pane,
754
+ .sqlite-structure-panel,
755
+ .sqlite-results-panel,
756
+ .sqlite-editor-frame {
757
+ overflow: hidden;
758
+ }
759
+
760
+ .sqlite-results-panel,
761
+ .sqlite-structure-panel-flush {
762
+ border-radius: 0;
763
+ }
764
+
765
+ .sqlite-query-layout,
766
+ .sqlite-editor-frame {
767
+ border-radius: 0;
768
+ }
769
+
770
+ .sqlite-query-layout {
771
+ min-height: 22rem;
772
+ height: 100%;
773
+ }
774
+
775
+ .sqlite-query-editor-pane {
776
+ min-height: 0;
777
+ }
778
+
779
+ .sqlite-query-results-pane {
780
+ min-height: 0;
781
+ flex: 1 1 0;
782
+ }
783
+
784
+ .sqlite-main-stack {
785
+ display: flex;
786
+ flex: 1;
787
+ flex-direction: column;
788
+ gap: 0.5rem;
789
+ min-height: 0;
790
+ height: 100%;
791
+ }
792
+
793
+ .sqlite-main-tabs {
794
+ align-self: flex-start;
795
+ flex-shrink: 0;
796
+ }
797
+
798
+ .sqlite-editor-shell {
799
+ display: flex;
800
+ width: 100%;
801
+ height: 100%;
802
+ min-height: 0;
803
+ flex: 1;
804
+ overflow: hidden;
805
+ }
806
+
807
+ .sqlite-editor-shell .cm-editor {
808
+ display: flex;
809
+ width: 100%;
810
+ min-height: 100%;
811
+ flex: 1 1 auto;
812
+ height: 100%;
813
+ background: transparent;
814
+ color: var(--sqlite-text);
815
+ }
816
+
817
+ .sqlite-editor-shell .cm-scroller {
818
+ align-items: stretch;
819
+ width: 100%;
820
+ height: 100%;
821
+ flex: 1 1 auto;
822
+ min-height: 0;
823
+ line-height: 1.55;
824
+ }
825
+
826
+ .sqlite-editor-shell .cm-sizer {
827
+ min-width: 100%;
828
+ min-height: 100%;
829
+ flex: 1 1 auto;
830
+ }
831
+
832
+ .sqlite-editor-shell .cm-gutters {
833
+ min-height: 100%;
834
+ padding-block: 0.25rem;
835
+ }
836
+
837
+ .sqlite-editor-shell .cm-gutterElement {
838
+ min-width: 2.5rem;
839
+ padding: 0 0.55rem 0 0.35rem;
840
+ }
841
+
842
+ .sqlite-editor-shell .cm-lineNumbers {
843
+ min-height: 100%;
844
+ }
845
+
846
+ .sqlite-editor-shell .cm-content,
847
+ .sqlite-editor-shell .cm-line {
848
+ padding: 0;
849
+ }
850
+
851
+ .sqlite-editor-shell .cm-content,
852
+ .sqlite-editor-shell .cm-gutter {
853
+ min-height: 100%;
854
+ }
855
+
856
+ .sqlite-editor-shell .cm-content {
857
+ box-sizing: border-box;
858
+ padding: 0.7rem 0.85rem 0.95rem 0.55rem;
859
+ }
860
+
861
+ .sqlite-editor-shell .cm-line {
862
+ padding-right: 0.4rem;
863
+ }
864
+
865
+ .sqlite-editor-shell .cm-selectionLayer .cm-selectionBackground {
866
+ border-radius: 0.2rem;
867
+ }
868
+
869
+ .sqlite-editor-shell .cm-focused {
870
+ outline: none;
871
+ }
872
+
873
+ .sqlite-editor-shell .cm-placeholder {
874
+ font-style: italic;
875
+ }
876
+
877
+ .sqlite-editor-shell .cm-activeLine {
878
+ border-radius: 0.35rem;
879
+ }
880
+
881
+ .sqlite-editor-shell .cm-sqlite-errorLine {
882
+ background: linear-gradient(
883
+ 90deg,
884
+ rgba(255, 123, 123, 0.16),
885
+ rgba(255, 123, 123, 0.08)
886
+ );
887
+ }
888
+
889
+ .sqlite-editor-shell .cm-tooltip-autocomplete {
890
+ backdrop-filter: blur(14px);
891
+ }
892
+
893
+ .sqlite-editor-shell .cm-tooltip-autocomplete > ul {
894
+ max-height: min(18rem, 45vh);
895
+ padding: 0.25rem;
896
+ }
897
+
898
+ .sqlite-editor-shell .cm-tooltip-autocomplete ul li {
899
+ border-radius: 0.6rem;
900
+ margin: 0.1rem 0;
901
+ padding-block: 0.32rem;
902
+ }
903
+
904
+ .sqlite-editor-shell .cm-completionLabel,
905
+ .sqlite-editor-shell .cm-completionDetail {
906
+ font-size: 0.8rem;
907
+ }
908
+
909
+ .sqlite-editor-shell .cm-completionIcon {
910
+ opacity: 0.8;
911
+ }
912
+
913
+ .sqlite-editor-shell .cm-tooltip.cm-completionInfo {
914
+ max-width: 20rem;
915
+ padding: 0.75rem 0.85rem;
916
+ backdrop-filter: blur(14px);
917
+ }
918
+
919
+ .sqlite-view-splitter {
920
+ position: relative;
921
+ flex-shrink: 0;
922
+ height: 0.8rem;
923
+ cursor: row-resize;
924
+ border-top: 1px solid var(--sqlite-line);
925
+ border-bottom: 1px solid var(--sqlite-line);
926
+ background: rgba(255, 255, 255, 0.02);
927
+ }
928
+
929
+ .sqlite-view-splitter::before {
930
+ content: '';
931
+ position: absolute;
932
+ left: 50%;
933
+ top: 50%;
934
+ width: 4rem;
935
+ height: 0.18rem;
936
+ transform: translate(-50%, -50%);
937
+ border-radius: 999px;
938
+ background: rgba(165, 185, 204, 0.42);
939
+ }
940
+
941
+ .sqlite-results-header,
942
+ .sqlite-object-header,
943
+ .sqlite-subtoolbar,
944
+ .sqlite-status-footer {
945
+ background: rgba(255, 255, 255, 0.018);
946
+ }
947
+
948
+ .sqlite-inline-error {
949
+ display: flex;
950
+ align-items: flex-start;
951
+ justify-content: space-between;
952
+ gap: 0.6rem;
953
+ flex-wrap: wrap;
954
+ margin: 0.7rem;
955
+ padding: 0.7rem 0.8rem;
956
+ border: 1px solid rgba(255, 123, 123, 0.28);
957
+ border-radius: 1rem;
958
+ background: rgba(255, 123, 123, 0.1);
959
+ }
960
+
961
+ .sqlite-query-statement-switcher {
962
+ min-width: 0;
963
+ flex: 1 1 auto;
964
+ max-width: 100%;
965
+ }
966
+
967
+ .sqlite-query-statement-switcher .sqlite-select {
968
+ width: 100%;
969
+ min-width: 0;
970
+ max-width: 100%;
971
+ }
972
+
973
+ .sqlite-query-results-header {
974
+ flex-wrap: nowrap;
975
+ }
976
+
977
+ .sqlite-query-results-header .sqlite-toolbar-actions {
978
+ min-width: 0;
979
+ flex-wrap: nowrap;
980
+ }
981
+
982
+ .sqlite-query-results-header-main {
983
+ flex: 1 1 auto;
984
+ overflow: hidden;
985
+ }
986
+
987
+ .sqlite-query-results-header-main .sqlite-helper-text {
988
+ white-space: nowrap;
989
+ overflow: hidden;
990
+ text-overflow: ellipsis;
991
+ }
992
+
993
+ .sqlite-query-results-header-actions {
994
+ flex: 0 0 auto;
995
+ }
996
+
997
+ .sqlite-results-shell,
998
+ .sqlite-metadata-table-wrap {
999
+ display: flex;
1000
+ flex-direction: column;
1001
+ min-height: 0;
1002
+ flex: 1;
1003
+ }
1004
+
1005
+ .sqlite-results-scroll,
1006
+ .sqlite-metadata-table-wrap,
1007
+ .sqlite-structure-panel {
1008
+ padding: 0.6rem;
1009
+ }
1010
+
1011
+ .sqlite-results-scroll {
1012
+ display: flex;
1013
+ flex-direction: column;
1014
+ flex: 1;
1015
+ min-height: 0;
1016
+ }
1017
+
1018
+ .sqlite-results-scroll-flush {
1019
+ padding: 0;
1020
+ }
1021
+
1022
+ .sqlite-metadata-table-wrap-flush,
1023
+ .sqlite-structure-panel-flush {
1024
+ padding: 0;
1025
+ }
1026
+
1027
+ .sqlite-results-empty {
1028
+ display: grid;
1029
+ flex: 1;
1030
+ place-items: center;
1031
+ min-height: 12rem;
1032
+ border: 1px dashed var(--sqlite-line);
1033
+ border-radius: 1rem;
1034
+ background: rgba(255, 255, 255, 0.02);
1035
+ padding: 1.1rem;
1036
+ }
1037
+
1038
+ .sqlite-results-table,
1039
+ .sqlite-metadata-table {
1040
+ width: 100%;
1041
+ display: grid;
1042
+ border-collapse: separate;
1043
+ border-spacing: 0;
1044
+ table-layout: fixed;
1045
+ }
1046
+
1047
+ .sqlite-results-table thead,
1048
+ .sqlite-metadata-table thead,
1049
+ .sqlite-results-table tbody,
1050
+ .sqlite-metadata-table tbody {
1051
+ display: grid;
1052
+ }
1053
+
1054
+ .sqlite-results-table tbody,
1055
+ .sqlite-metadata-table tbody {
1056
+ position: relative;
1057
+ }
1058
+
1059
+ .sqlite-table-row-shell,
1060
+ .sqlite-results-table tbody tr,
1061
+ .sqlite-metadata-table tbody tr {
1062
+ display: flex;
1063
+ width: 100%;
1064
+ }
1065
+
1066
+ .sqlite-results-table tbody tr,
1067
+ .sqlite-metadata-table tbody tr {
1068
+ position: absolute;
1069
+ top: 0;
1070
+ left: 0;
1071
+ }
1072
+
1073
+ .sqlite-results-table thead th,
1074
+ .sqlite-metadata-table thead th {
1075
+ position: sticky;
1076
+ top: 0;
1077
+ z-index: 2;
1078
+ background: rgba(8, 17, 26, 0.98);
1079
+ color: rgba(200, 216, 230, 0.76);
1080
+ font-size: 0.68rem;
1081
+ letter-spacing: 0.1em;
1082
+ text-transform: uppercase;
1083
+ text-align: left;
1084
+ line-height: 1.2;
1085
+ padding: 0.55rem 0.65rem;
1086
+ border-bottom: 1px solid var(--sqlite-line);
1087
+ display: flex;
1088
+ }
1089
+
1090
+ .sqlite-results-table tbody td,
1091
+ .sqlite-metadata-table tbody td {
1092
+ padding: 0.55rem 0.65rem;
1093
+ border-bottom: 1px solid rgba(167, 194, 220, 0.08);
1094
+ vertical-align: top;
1095
+ line-height: 1.35;
1096
+ color: rgba(240, 246, 251, 0.92);
1097
+ display: flex;
1098
+ align-items: flex-start;
1099
+ }
1100
+
1101
+ .sqlite-results-table tbody tr:hover td,
1102
+ .sqlite-metadata-table tbody tr:hover td {
1103
+ background: rgba(130, 50, 255, 0.05);
1104
+ }
1105
+
1106
+ .sqlite-results-number-col,
1107
+ .sqlite-results-row-number {
1108
+ width: 4.5rem;
1109
+ }
1110
+
1111
+ .sqlite-results-row-number {
1112
+ color: var(--sqlite-muted-soft);
1113
+ }
1114
+
1115
+ .sqlite-results-row {
1116
+ cursor: pointer;
1117
+ }
1118
+
1119
+ .sqlite-results-row:focus-visible {
1120
+ outline: none;
1121
+ }
1122
+
1123
+ .sqlite-results-row:focus-visible td {
1124
+ background: rgba(130, 50, 255, 0.08);
1125
+ box-shadow:
1126
+ inset 0 1px 0 rgba(130, 50, 255, 0.18),
1127
+ inset 0 -1px 0 rgba(130, 50, 255, 0.18);
1128
+ }
1129
+
1130
+ .sqlite-table-header-content {
1131
+ display: flex;
1132
+ align-items: center;
1133
+ justify-content: space-between;
1134
+ gap: 0.4rem;
1135
+ min-width: 0;
1136
+ padding-right: 0.45rem;
1137
+ }
1138
+
1139
+ .sqlite-column-resizer {
1140
+ position: absolute;
1141
+ top: 0.35rem;
1142
+ right: -0.45rem;
1143
+ width: 0.9rem;
1144
+ height: calc(100% - 0.7rem);
1145
+ cursor: col-resize;
1146
+ touch-action: none;
1147
+ user-select: none;
1148
+ z-index: 3;
1149
+ }
1150
+
1151
+ .sqlite-column-resizer::before {
1152
+ content: '';
1153
+ position: absolute;
1154
+ left: 50%;
1155
+ top: 0;
1156
+ width: 1px;
1157
+ height: 100%;
1158
+ transform: translateX(-50%);
1159
+ border-radius: 999px;
1160
+ background: rgba(167, 194, 220, 0.28);
1161
+ transition:
1162
+ background-color 140ms ease,
1163
+ box-shadow 140ms ease;
1164
+ }
1165
+
1166
+ .sqlite-column-resizer:hover::before,
1167
+ .sqlite-column-resizer.is-active::before {
1168
+ background: rgba(130, 50, 255, 0.92);
1169
+ box-shadow: 0 0 0 1px rgba(130, 50, 255, 0.22);
1170
+ }
1171
+
1172
+ .sqlite-column-resizer:focus-visible::before {
1173
+ background: rgba(130, 50, 255, 0.92);
1174
+ box-shadow:
1175
+ 0 0 0 1px rgba(130, 50, 255, 0.22),
1176
+ 0 0 0 4px rgba(130, 50, 255, 0.08);
1177
+ }
1178
+
1179
+ .sqlite-table-column-resizing {
1180
+ background: rgba(130, 50, 255, 0.06);
1181
+ }
1182
+
1183
+ .sqlite-cell-kind,
1184
+ .sqlite-object-section-title,
1185
+ .sqlite-tree-empty {
1186
+ color: var(--sqlite-muted-soft);
1187
+ font-size: 0.72rem;
1188
+ letter-spacing: 0.08em;
1189
+ text-transform: uppercase;
1190
+ }
1191
+
1192
+ .sqlite-cell-value {
1193
+ display: grid;
1194
+ gap: 0.2rem;
1195
+ width: 100%;
1196
+ min-width: 0;
1197
+ text-align: left;
1198
+ }
1199
+
1200
+ .sqlite-cell-preview {
1201
+ color: rgba(241, 247, 251, 0.94);
1202
+ overflow: hidden;
1203
+ text-overflow: ellipsis;
1204
+ white-space: nowrap;
1205
+ min-width: 0;
1206
+ }
1207
+
1208
+ .sqlite-cell-kind {
1209
+ white-space: nowrap;
1210
+ }
1211
+
1212
+ .sqlite-connection-list,
1213
+ .sqlite-tree-shell,
1214
+ .sqlite-object-list,
1215
+ .sqlite-schema-content {
1216
+ display: grid;
1217
+ gap: 0.55rem;
1218
+ min-width: 0;
1219
+ }
1220
+
1221
+ .sqlite-connection-card,
1222
+ .sqlite-schema-group {
1223
+ display: grid;
1224
+ gap: 0.3rem;
1225
+ min-width: 0;
1226
+ }
1227
+
1228
+ .sqlite-tree-shell {
1229
+ padding-left: 0.45rem;
1230
+ }
1231
+
1232
+ .sqlite-connection-row,
1233
+ .sqlite-schema-row,
1234
+ .sqlite-object-row {
1235
+ display: flex;
1236
+ align-items: center;
1237
+ gap: 0.5rem;
1238
+ min-width: 0;
1239
+ width: 100%;
1240
+ padding: 0.58rem 0.7rem;
1241
+ border-radius: 0.85rem;
1242
+ border: 1px solid transparent;
1243
+ background: rgba(255, 255, 255, 0.025);
1244
+ color: rgba(238, 246, 252, 0.9);
1245
+ text-align: left;
1246
+ cursor: pointer;
1247
+ transition:
1248
+ background-color 140ms ease,
1249
+ border-color 140ms ease,
1250
+ color 140ms ease,
1251
+ transform 140ms ease;
1252
+ }
1253
+
1254
+ .sqlite-connection-row:hover,
1255
+ .sqlite-schema-row:hover,
1256
+ .sqlite-object-row:hover {
1257
+ background: rgba(255, 255, 255, 0.055);
1258
+ color: white;
1259
+ }
1260
+
1261
+ .sqlite-object-row.is-active {
1262
+ border-color: rgba(130, 50, 255, 0.24);
1263
+ background: rgba(130, 50, 255, 0.12);
1264
+ color: white;
1265
+ }
1266
+
1267
+ .sqlite-schema-content {
1268
+ padding-left: 0.85rem;
1269
+ border-left: 1px solid rgba(167, 194, 220, 0.08);
1270
+ }
1271
+
1272
+ .sqlite-inline-stat {
1273
+ color: var(--sqlite-muted);
1274
+ font-size: 0.76rem;
1275
+ }
1276
+
1277
+ .sqlite-structure-grid {
1278
+ display: grid;
1279
+ gap: 0.85rem;
1280
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1281
+ }
1282
+
1283
+ .sqlite-detail-card,
1284
+ .sqlite-key-row {
1285
+ border: 1px solid var(--sqlite-line);
1286
+ border-radius: 1rem;
1287
+ background: rgba(255, 255, 255, 0.03);
1288
+ }
1289
+
1290
+ .sqlite-detail-card {
1291
+ padding: 0.8rem;
1292
+ }
1293
+
1294
+ .sqlite-detail-card > header {
1295
+ margin-bottom: 0.75rem;
1296
+ }
1297
+
1298
+ .sqlite-key-row {
1299
+ display: flex;
1300
+ align-items: center;
1301
+ justify-content: space-between;
1302
+ gap: 0.6rem;
1303
+ padding: 0.65rem 0.75rem;
1304
+ }
1305
+
1306
+ .sqlite-key-row > div {
1307
+ min-width: 0;
1308
+ }
1309
+
1310
+ .sqlite-status-footer {
1311
+ color: var(--sqlite-muted);
1312
+ font-size: 0.76rem;
1313
+ }
1314
+
1315
+ .sqlite-tree-empty {
1316
+ padding: 0.7rem;
1317
+ border: 1px dashed var(--sqlite-line);
1318
+ border-radius: 0.95rem;
1319
+ background: rgba(255, 255, 255, 0.02);
1320
+ }
1321
+
1322
+ .sqlite-object-section-title {
1323
+ margin: 0 0 0.15rem;
1324
+ }
1325
+
1326
+ .sqlite-chip {
1327
+ cursor: pointer;
1328
+ }
1329
+
1330
+ .sqlite-chip-static {
1331
+ cursor: default;
1332
+ }
1333
+
1334
+ .sqlite-panel-shell .button[data-variant='ghost'] {
1335
+ border-color: var(--sqlite-line);
1336
+ background: rgba(255, 255, 255, 0.03);
1337
+ color: rgba(226, 232, 240, 0.9);
1338
+ }
1339
+
1340
+ .sqlite-panel-shell .button[data-variant='ghost']:hover {
1341
+ border-color: var(--sqlite-line-strong);
1342
+ background: rgba(255, 255, 255, 0.07);
1343
+ }
1344
+
1345
+ .sqlite-panel-shell .drawer__dialog,
1346
+ .sqlite-panel-shell .modal__dialog {
1347
+ border-color: var(--sqlite-line-strong);
1348
+ background: linear-gradient(
1349
+ 180deg,
1350
+ rgba(11, 20, 30, 0.98),
1351
+ rgba(7, 13, 21, 0.98)
1352
+ );
1353
+ box-shadow: 0 28px 80px rgba(0, 0, 0, 0.48);
1354
+ }
1355
+
1356
+ .sqlite-panel-shell .drawer__backdrop,
1357
+ .sqlite-panel-shell .modal__backdrop {
1358
+ background: rgba(2, 6, 12, 0.66);
1359
+ backdrop-filter: blur(18px);
1360
+ overscroll-behavior: contain;
1361
+ }
1362
+
1363
+ .sqlite-panel-shell .tabs__tab {
1364
+ color: rgba(148, 163, 184, 0.9);
1365
+ }
1366
+
1367
+ .sqlite-panel-shell .tabs__tab[data-selected='true'] {
1368
+ background: var(--sqlite-accent-soft);
1369
+ color: white;
1370
+ }
1371
+
1372
+ .sr-only {
1373
+ position: absolute;
1374
+ width: 1px;
1375
+ height: 1px;
1376
+ padding: 0;
1377
+ margin: -1px;
1378
+ overflow: hidden;
1379
+ clip: rect(0, 0, 0, 0);
1380
+ white-space: nowrap;
1381
+ border: 0;
1382
+ }
1383
+
1384
+ @media (max-width: 1180px) {
1385
+ .sqlite-topbar {
1386
+ grid-template-columns: 1fr;
1387
+ }
1388
+
1389
+ .sqlite-topbar-search,
1390
+ .sqlite-topbar-section {
1391
+ justify-content: flex-start;
1392
+ }
1393
+
1394
+ .sqlite-structure-grid {
1395
+ grid-template-columns: 1fr;
1396
+ }
1397
+ }
1398
+
1399
+ @media (prefers-reduced-motion: reduce) {
1400
+ *,
1401
+ *::before,
1402
+ *::after {
1403
+ animation-duration: 0.01ms !important;
1404
+ animation-iteration-count: 1 !important;
1405
+ transition-duration: 0.01ms !important;
1406
+ scroll-behavior: auto !important;
1407
+ }
1408
+ }
1409
+
1410
+ @keyframes sqlite-shimmer {
1411
+ to {
1412
+ transform: translateX(100%);
1413
+ }
1414
+ }
1415
+ }