database-devtools 0.1.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 (94) hide show
  1. package/LICENSE +5 -0
  2. package/dist/adapter/index.cjs +314 -0
  3. package/dist/adapter/index.cjs.map +1 -0
  4. package/dist/adapter/index.d.cts +34 -0
  5. package/dist/adapter/index.d.ts +34 -0
  6. package/dist/adapter/index.js +6 -0
  7. package/dist/adapter/index.js.map +1 -0
  8. package/dist/adapter-BjJm71wW.d.cts +30 -0
  9. package/dist/adapter-DJSjDewg.d.ts +30 -0
  10. package/dist/adapters/sqlite/index.cjs +251 -0
  11. package/dist/adapters/sqlite/index.cjs.map +1 -0
  12. package/dist/adapters/sqlite/index.d.cts +21 -0
  13. package/dist/adapters/sqlite/index.d.ts +21 -0
  14. package/dist/adapters/sqlite/index.js +6 -0
  15. package/dist/adapters/sqlite/index.js.map +1 -0
  16. package/dist/chunk-2JGL2JVD.js +52 -0
  17. package/dist/chunk-2JGL2JVD.js.map +1 -0
  18. package/dist/chunk-AZECU6D7.js +27 -0
  19. package/dist/chunk-AZECU6D7.js.map +1 -0
  20. package/dist/chunk-BLOSGEQV.js +71 -0
  21. package/dist/chunk-BLOSGEQV.js.map +1 -0
  22. package/dist/chunk-CPVVIH5G.js +258 -0
  23. package/dist/chunk-CPVVIH5G.js.map +1 -0
  24. package/dist/chunk-DGUM43GV.js +10 -0
  25. package/dist/chunk-DGUM43GV.js.map +1 -0
  26. package/dist/chunk-HIDZTOJ3.js +9 -0
  27. package/dist/chunk-HIDZTOJ3.js.map +1 -0
  28. package/dist/chunk-I65IM47D.js +243 -0
  29. package/dist/chunk-I65IM47D.js.map +1 -0
  30. package/dist/chunk-MXVIGMVT.js +3 -0
  31. package/dist/chunk-MXVIGMVT.js.map +1 -0
  32. package/dist/chunk-O6AO7KHA.js +3 -0
  33. package/dist/chunk-O6AO7KHA.js.map +1 -0
  34. package/dist/chunk-TNDOAHT5.js +1784 -0
  35. package/dist/chunk-TNDOAHT5.js.map +1 -0
  36. package/dist/chunk-ZS5MZR75.js +655 -0
  37. package/dist/chunk-ZS5MZR75.js.map +1 -0
  38. package/dist/cli.cjs +2053 -0
  39. package/dist/cli.cjs.map +1 -0
  40. package/dist/client/index.cjs +947 -0
  41. package/dist/client/index.cjs.map +1 -0
  42. package/dist/client/index.d.cts +75 -0
  43. package/dist/client/index.d.ts +75 -0
  44. package/dist/client/index.js +98 -0
  45. package/dist/client/index.js.map +1 -0
  46. package/dist/createDevToolsServer-B7NQ_5H4.d.cts +292 -0
  47. package/dist/createDevToolsServer-DlNMoCJR.d.ts +292 -0
  48. package/dist/handleDeviceSnapshot-CR-4QMdk.d.ts +116 -0
  49. package/dist/handleDeviceSnapshot-cYGuitSc.d.cts +116 -0
  50. package/dist/index.cjs +5877 -0
  51. package/dist/index.cjs.map +1 -0
  52. package/dist/index.d.cts +61 -0
  53. package/dist/index.d.ts +61 -0
  54. package/dist/index.js +2748 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/inspector/index.cjs +57 -0
  57. package/dist/inspector/index.cjs.map +1 -0
  58. package/dist/inspector/index.d.cts +26 -0
  59. package/dist/inspector/index.d.ts +26 -0
  60. package/dist/inspector/index.js +5 -0
  61. package/dist/inspector/index.js.map +1 -0
  62. package/dist/inspectors/sqlite/index.cjs +306 -0
  63. package/dist/inspectors/sqlite/index.cjs.map +1 -0
  64. package/dist/inspectors/sqlite/index.d.cts +53 -0
  65. package/dist/inspectors/sqlite/index.d.ts +53 -0
  66. package/dist/inspectors/sqlite/index.js +260 -0
  67. package/dist/inspectors/sqlite/index.js.map +1 -0
  68. package/dist/register-BuicFu9L.d.cts +32 -0
  69. package/dist/register-aITLN9Q9.d.ts +32 -0
  70. package/dist/server/index.cjs +1948 -0
  71. package/dist/server/index.cjs.map +1 -0
  72. package/dist/server/index.d.cts +15 -0
  73. package/dist/server/index.d.ts +15 -0
  74. package/dist/server/index.js +7 -0
  75. package/dist/server/index.js.map +1 -0
  76. package/dist/snapshot-Dhyecgo2.d.cts +33 -0
  77. package/dist/snapshot-Dhyecgo2.d.ts +33 -0
  78. package/dist/types/protocol.cjs +309 -0
  79. package/dist/types/protocol.cjs.map +1 -0
  80. package/dist/types/protocol.d.cts +291 -0
  81. package/dist/types/protocol.d.ts +291 -0
  82. package/dist/types/protocol.js +4 -0
  83. package/dist/types/protocol.js.map +1 -0
  84. package/dist/types-BRLJdBRY.d.cts +16 -0
  85. package/dist/types-CF6qEU-_.d.ts +16 -0
  86. package/dist/types-CIA11diJ.d.cts +62 -0
  87. package/dist/types-CKVRCX-e.d.ts +62 -0
  88. package/dist/web/assets/index-CLEaIsUd.css +1 -0
  89. package/dist/web/assets/index-DQrPRTOy.js +100 -0
  90. package/dist/web/assets/sql-wasm-UFUCzYNW.wasm +0 -0
  91. package/dist/web/index.html +26 -0
  92. package/dist/write-C3toEIMs.d.cts +21 -0
  93. package/dist/write-C3toEIMs.d.ts +21 -0
  94. package/package.json +137 -0
@@ -0,0 +1,62 @@
1
+ import { D as DatabaseKind, I as InspectorCapabilities, S as SnapshotExport } from './snapshot-Dhyecgo2.cjs';
2
+
3
+ type ColumnInfo = {
4
+ name: string;
5
+ type: string;
6
+ notNull: boolean;
7
+ pk: boolean;
8
+ defaultValue: string | null;
9
+ };
10
+ type SchemaTable = {
11
+ name: string;
12
+ columns: ColumnInfo[];
13
+ };
14
+ type TableInfo = {
15
+ name: string;
16
+ rowCount: number;
17
+ };
18
+ type QueryResult = {
19
+ columns: string[];
20
+ rows: (string | number | null)[][];
21
+ rowCount: number;
22
+ durationMs: number;
23
+ };
24
+ type QueryError = {
25
+ message: string;
26
+ sql: string;
27
+ };
28
+ type TablePageRequest = {
29
+ table: string;
30
+ page: number;
31
+ pageSize: number;
32
+ sortColumn?: string | null;
33
+ sortDir?: 'asc' | 'desc';
34
+ search?: string;
35
+ };
36
+ type TablePageResult = {
37
+ columns: string[];
38
+ rows: (string | number | null)[][];
39
+ totalCount: number;
40
+ page: number;
41
+ pageSize: number;
42
+ };
43
+
44
+ interface DatabaseInspector {
45
+ readonly kind: DatabaseKind;
46
+ readonly capabilities: InspectorCapabilities;
47
+ open(snapshot: SnapshotExport | ArrayBuffer): Promise<void>;
48
+ close(): void;
49
+ listTables(): TableInfo[];
50
+ getSchema(): SchemaTable[];
51
+ fetchTablePage(request: TablePageRequest): TablePageResult;
52
+ executeQuery(sql: string): QueryResult;
53
+ }
54
+ type InspectorDefinition = {
55
+ kind: DatabaseKind;
56
+ displayName: string;
57
+ mimeTypes: string[];
58
+ canOpenBytes?: (bytes: ArrayBuffer) => boolean;
59
+ createInspector: () => DatabaseInspector | Promise<DatabaseInspector>;
60
+ };
61
+
62
+ export type { ColumnInfo as C, DatabaseInspector as D, InspectorDefinition as I, QueryResult as Q, SchemaTable as S, TableInfo as T, TablePageRequest as a, TablePageResult as b, QueryError as c };
@@ -0,0 +1,62 @@
1
+ import { D as DatabaseKind, I as InspectorCapabilities, S as SnapshotExport } from './snapshot-Dhyecgo2.js';
2
+
3
+ type ColumnInfo = {
4
+ name: string;
5
+ type: string;
6
+ notNull: boolean;
7
+ pk: boolean;
8
+ defaultValue: string | null;
9
+ };
10
+ type SchemaTable = {
11
+ name: string;
12
+ columns: ColumnInfo[];
13
+ };
14
+ type TableInfo = {
15
+ name: string;
16
+ rowCount: number;
17
+ };
18
+ type QueryResult = {
19
+ columns: string[];
20
+ rows: (string | number | null)[][];
21
+ rowCount: number;
22
+ durationMs: number;
23
+ };
24
+ type QueryError = {
25
+ message: string;
26
+ sql: string;
27
+ };
28
+ type TablePageRequest = {
29
+ table: string;
30
+ page: number;
31
+ pageSize: number;
32
+ sortColumn?: string | null;
33
+ sortDir?: 'asc' | 'desc';
34
+ search?: string;
35
+ };
36
+ type TablePageResult = {
37
+ columns: string[];
38
+ rows: (string | number | null)[][];
39
+ totalCount: number;
40
+ page: number;
41
+ pageSize: number;
42
+ };
43
+
44
+ interface DatabaseInspector {
45
+ readonly kind: DatabaseKind;
46
+ readonly capabilities: InspectorCapabilities;
47
+ open(snapshot: SnapshotExport | ArrayBuffer): Promise<void>;
48
+ close(): void;
49
+ listTables(): TableInfo[];
50
+ getSchema(): SchemaTable[];
51
+ fetchTablePage(request: TablePageRequest): TablePageResult;
52
+ executeQuery(sql: string): QueryResult;
53
+ }
54
+ type InspectorDefinition = {
55
+ kind: DatabaseKind;
56
+ displayName: string;
57
+ mimeTypes: string[];
58
+ canOpenBytes?: (bytes: ArrayBuffer) => boolean;
59
+ createInspector: () => DatabaseInspector | Promise<DatabaseInspector>;
60
+ };
61
+
62
+ export type { ColumnInfo as C, DatabaseInspector as D, InspectorDefinition as I, QueryResult as Q, SchemaTable as S, TableInfo as T, TablePageRequest as a, TablePageResult as b, QueryError as c };
@@ -0,0 +1 @@
1
+ :root,[data-theme=dark]{color-scheme:dark;--bg-app: #0f1117;--bg-surface: #171b24;--bg-elevated: #1e2430;--bg-hover: #252b38;--border: #2a3142;--table-grid: #3a4458;--text-primary: #e6e8ef;--text-muted: #9aa3b8;--text-subtle: #6b7280;--accent: #3b82f6;--accent-soft: rgba(59, 130, 246, .12);--status-connected: #3ddc84;--status-warning: #f5a623;--status-error: #ff6b6b;--banner-bg: rgba(59, 130, 246, .1);--banner-border: rgba(59, 130, 246, .25);--sidebar-width: 220px;--shadow: 0 8px 24px rgba(0, 0, 0, .35)}[data-theme=light]{color-scheme:light;--bg-app: #f4f6f9;--bg-surface: #ffffff;--bg-elevated: #f8fafc;--bg-hover: #eef2f7;--border: #d8dee9;--table-grid: #c5ced9;--text-primary: #0f172a;--text-muted: #64748b;--text-subtle: #94a3b8;--accent: #2563eb;--accent-soft: rgba(37, 99, 235, .08);--status-connected: #16a34a;--status-warning: #d97706;--status-error: #dc2626;--banner-bg: rgba(37, 99, 235, .08);--banner-border: rgba(37, 99, 235, .2);--shadow: 0 8px 24px rgba(15, 23, 42, .08)}.devtools-shell{display:grid;grid-template-rows:auto 1fr;height:100dvh;min-height:0;overflow:hidden}.devtools-shell__header,.devtools-chrome{display:flex;flex-direction:column;min-width:0}.devtools-chrome:empty{display:none}.devtools-body{display:grid;grid-template-columns:var(--sidebar-width) 1fr;min-height:0;overflow:hidden}.top-bar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:1rem;padding:.75rem 1rem;background:var(--bg-surface);border-bottom:1px solid var(--border)}.top-bar__left,.top-bar__right{display:flex;align-items:center;gap:.75rem}.top-bar__right{justify-content:flex-end}.top-bar__hub-chip{padding:.25rem .5rem;border-radius:999px;background:color-mix(in srgb,var(--status-warning) 14%,var(--bg-elevated));color:var(--status-warning);font-size:.75rem;font-weight:600;white-space:nowrap}.top-bar__hub-chip--error{background:color-mix(in srgb,var(--status-error) 12%,var(--bg-elevated));color:var(--status-error)}.top-bar__center{display:flex;justify-content:center;min-width:0}.top-bar__brand{display:flex;align-items:center;gap:.625rem;min-width:0}.top-bar__logo{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.5rem;background:var(--accent-soft);color:var(--accent);font-size:.75rem;font-weight:700}.top-bar__title{margin:0;font-size:1rem;font-weight:600;white-space:nowrap}.top-bar__menu-button,.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);color:var(--text-primary);cursor:pointer}.top-bar__menu-button:hover,.theme-toggle:hover{background:var(--bg-hover)}.devtools-body--nav-collapsed{--sidebar-width: 4rem}@media(min-width:768px){.devtools-body--nav-hidden{grid-template-columns:0 minmax(0,1fr)}.devtools-body--nav-hidden .sidebar{overflow:hidden;border-right:none;opacity:0;pointer-events:none}}.sidebar{background:var(--bg-surface);border-right:1px solid var(--border);overflow-y:auto;display:flex;flex-direction:column}.sidebar--collapsed .sidebar__label{display:none}.sidebar--collapsed .sidebar__item{justify-content:center;padding-inline:.5rem}.sidebar__item{display:flex;align-items:center;gap:.625rem;padding:.625rem .75rem;border:none;border-radius:.5rem;background:transparent;color:var(--text-muted);text-align:left;font-size:.9375rem;cursor:pointer}.sidebar__icon{display:inline-flex;flex-shrink:0}.sidebar__collapse{margin-top:auto;margin:auto .5rem .5rem;display:none;align-items:center;justify-content:center;width:calc(100% - 1rem);height:2rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);color:var(--text-muted);cursor:pointer}@media(min-width:768px){.sidebar__collapse{display:inline-flex}}.sidebar__nav{display:flex;flex-direction:column;gap:.25rem;padding:.75rem;flex:1}.sidebar__item:hover{background:var(--bg-hover);color:var(--text-primary)}.sidebar__item--active{background:var(--accent-soft);color:var(--accent);font-weight:600}.sidebar-backdrop{display:none}.main-content{overflow:auto;padding:1.25rem;background:var(--bg-app);min-height:0;min-width:0}.main-content--workspace{display:flex;flex-direction:column;overflow:hidden;padding:0;flex:1}.main-content--overview{display:flex;flex-direction:column;overflow:auto;padding:1.25rem;flex:1;min-height:0;background:var(--bg-app)}@media(max-width:1023px){:root,[data-theme=dark],[data-theme=light]{--sidebar-width: 180px}}@media(max-width:767px){.top-bar{grid-template-columns:auto 1fr auto}.top-bar__center{grid-column:1 / -1;grid-row:2;justify-content:stretch}.top-bar__title{display:none}.devtools-body{grid-template-columns:1fr}.sidebar{position:fixed;top:0;left:0;bottom:0;width:min(80vw,280px);z-index:30;transform:translate(-100%);transition:transform .2s ease;box-shadow:var(--shadow)}.sidebar--open{transform:translate(0)}.sidebar-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;background:#00000073;opacity:0;pointer-events:none;transition:opacity .2s ease}.sidebar-backdrop--visible{opacity:1;pointer-events:auto}}.status-badge{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .625rem;border-radius:999px;font-size:.8125rem;font-weight:600;background:var(--bg-elevated);border:1px solid var(--border)}.status-badge__dot{width:.5rem;height:.5rem;border-radius:50%;background:currentColor}.status-badge--connected{color:var(--status-connected)}.status-badge--connecting,.status-badge--reconnecting{color:var(--status-warning)}.status-badge--disconnected{color:var(--status-error)}.status-badge--offline{color:var(--status-warning)}.status-badge--live-available{color:var(--status-connected);border-color:color-mix(in srgb,var(--status-connected) 35%,var(--border))}.device-selector{display:flex;align-items:center;gap:.5rem;min-width:0;width:100%;max-width:28rem}.device-selector__label{font-size:.8125rem;color:var(--text-muted);white-space:nowrap}.device-selector__select{flex:1;min-width:0;padding:.5rem .75rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);color:var(--text-primary);font-size:.875rem}.refresh-control{display:flex;align-items:center;gap:.5rem;min-width:0}.refresh-button{padding:.5rem .875rem;border:1px solid var(--border);border-radius:.5rem;background:var(--accent-soft);color:var(--accent);font-size:.875rem;font-weight:600;cursor:pointer;white-space:nowrap}.refresh-button:hover:not(:disabled){background:var(--accent);color:#fff}.refresh-button:disabled{opacity:.55;cursor:not-allowed}.refresh-button--secondary{background:var(--bg-surface);color:var(--text-primary)}.refresh-button--secondary:hover:not(:disabled){background:var(--bg-elevated);color:var(--text-primary)}.project-database-controls{flex-shrink:1}.getting-started{margin:0 0 1rem;padding:1rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface)}.getting-started__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.75rem}.getting-started__title{margin:0;font-size:.9375rem}.getting-started__dismiss{padding:.25rem .5rem;border:none;border-radius:.375rem;background:transparent;color:var(--text-muted);font-size:.8125rem;cursor:pointer}.getting-started__dismiss:hover{background:var(--bg-hover);color:var(--text-primary)}.getting-started__list{margin:0 0 .75rem;padding:0;list-style:none}.getting-started__item{display:flex;align-items:center;gap:.5rem;padding:.375rem 0;font-size:.875rem;color:var(--text-muted)}.getting-started__item--done{color:var(--text-primary)}.getting-started__marker{width:1.25rem;text-align:center;color:var(--accent)}.getting-started__actions{display:flex;flex-wrap:wrap;gap:.5rem}.activity-indicator{display:inline-flex;align-items:center;gap:.5rem;padding:.25rem .625rem;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:.75rem;font-weight:600}.activity-indicator__spinner{width:.75rem;height:.75rem;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:activity-spin .8s linear infinite}@keyframes activity-spin{to{transform:rotate(360deg)}}.connection-help{padding:.5rem 1rem;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--status-warning) 10%,var(--bg-elevated))}.connection-help__text{margin:0;font-size:.8125rem;color:var(--text-muted)}.connection-help__text--error{color:var(--status-error)}.overview-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem}.overview-actions__primary{padding:.5rem .875rem;border:1px solid var(--accent);border-radius:.5rem;background:var(--accent);color:#fff;font-size:.875rem;font-weight:600;cursor:pointer}.overview-actions__primary:hover{filter:brightness(1.05)}.overview-actions__hint{font-size:.8125rem;color:var(--text-muted)}.refresh-control__status{font-size:.75rem;color:var(--text-muted);white-space:nowrap}.refresh-control__error{font-size:.75rem;color:var(--status-error);max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel{max-width:960px}.panel__title{margin:0 0 .5rem;font-size:1.25rem}.panel__subtitle{margin:0 0 1rem;color:var(--text-muted);font-size:.8125rem}.panel__section-title{margin:1.25rem 0 .75rem;font-size:.9375rem;color:var(--text-muted)}.panel__footer{margin:1rem 0 0;font-size:.8125rem;color:var(--text-subtle)}.placeholder-banner{margin-bottom:1rem;padding:.75rem 1rem;border-radius:.5rem;border:1px solid var(--banner-border);background:var(--banner-bg);color:var(--text-muted);font-size:.875rem}.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem}.card{padding:1rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface)}.card__title{margin:0 0 .75rem;font-size:.875rem;color:var(--text-muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.card__meta{margin:.75rem 0 0;font-size:.8125rem;color:var(--text-subtle)}.meta-list{margin:0}.meta-list__row{display:grid;grid-template-columns:7rem 1fr;gap:.5rem;padding:.375rem 0;border-bottom:1px solid var(--border)}.meta-list__row:last-child{border-bottom:none}.meta-list__row dt{margin:0;color:var(--text-muted);font-size:.8125rem}.meta-list__row dd{margin:0;font-size:.875rem;word-break:break-all}.empty-state{padding:2rem 1rem;border:1px dashed var(--border);border-radius:.75rem;text-align:center;background:var(--bg-surface)}.empty-state__title{margin:0 0 .5rem;font-weight:600}.empty-state__text{margin:0;color:var(--text-muted)}.data-table-wrapper{overflow:auto;border:1px solid var(--table-grid);border-radius:.75rem;background:var(--bg-surface)}.data-table{width:100%;border-collapse:collapse;font-size:.875rem}.data-table th,.data-table td{padding:.75rem 1rem;border:1px solid var(--table-grid);text-align:left;vertical-align:middle}.data-table th{background:var(--bg-elevated);color:var(--text-muted);font-weight:600}.field-label{display:block;margin-bottom:.5rem;font-size:.8125rem;color:var(--text-muted)}.sql-editor{width:100%;padding:.875rem 1rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);color:var(--text-primary);resize:vertical;font-size:.8125rem;line-height:1.6}.schema-tree{display:flex;flex-direction:column;gap:.75rem}.schema-tree__table{border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);overflow:hidden}.schema-tree__summary{padding:.875rem 1rem;cursor:pointer;font-weight:600;list-style:none}.schema-tree__summary::-webkit-details-marker{display:none}.schema-tree__columns{margin:0;padding:0 1rem .75rem;list-style:none}.schema-tree__column{display:flex;align-items:center;gap:.75rem;padding:.5rem 0;border-top:1px solid var(--border);font-size:.875rem}.schema-tree__type{color:var(--text-muted);font-size:.8125rem}.schema-tree__badge{margin-left:auto;padding:.125rem .375rem;border-radius:.25rem;background:var(--bg-elevated);color:var(--text-subtle);font-size:.6875rem;font-weight:600}.field-label__hint{color:var(--text-subtle);font-weight:400}.query-actions{display:flex;align-items:center;gap:.75rem;margin:.75rem 0 1rem}.query-run-button{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem 1rem;border:1px solid var(--border);border-radius:.5rem;background:var(--accent);color:#fff;font-size:.875rem;font-weight:600;cursor:pointer}.query-run-button:disabled{opacity:.55;cursor:not-allowed}.query-meta{font-size:.8125rem;color:var(--text-muted)}.query-error{margin:0 0 1rem;padding:.75rem 1rem;border-radius:.5rem;border:1px solid rgba(220,38,38,.25);background:#dc262614;color:var(--status-error);font-size:.875rem}.toast-viewport{position:fixed;right:1rem;bottom:1rem;z-index:10000;display:flex;flex-direction:column;gap:.75rem;width:min(22rem,calc(100vw - 2rem));pointer-events:none}.toast{display:flex;align-items:flex-start;gap:.75rem;padding:.875rem 1rem;border-radius:.75rem;border:1px solid var(--border);background:var(--bg-elevated);box-shadow:0 10px 30px #0f172a1f;pointer-events:auto}.toast--success{border-color:#16a34a59;background:#16a34a14}.toast--error{border-color:#dc262659;background:#dc262614}.toast__content{flex:1;min-width:0}.toast__title{margin:0 0 .25rem;font-size:.875rem;font-weight:700;color:var(--text-primary)}.toast__message{margin:0;font-size:.8125rem;color:var(--text-muted);line-height:1.45;word-break:break-word}.toast__dismiss{flex-shrink:0;width:1.5rem;height:1.5rem;border:none;border-radius:.375rem;background:transparent;color:var(--text-muted);font-size:1.125rem;line-height:1;cursor:pointer}.toast__dismiss:hover{background:#0f172a0f;color:var(--text-primary)}.panel--explorer{max-width:none;display:flex;flex-direction:column;min-height:0;height:calc(100dvh - 8rem)}.explorer{display:grid;grid-template-columns:240px 1fr;gap:1rem;flex:1;min-height:0}.explorer__main{display:flex;flex-direction:column;min-width:0;min-height:0;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);overflow:hidden}.explorer__content{flex:1;min-height:0;overflow:auto;padding:0 1rem}.explorer-sidebar{display:flex;flex-direction:column;min-height:0;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);overflow:hidden}.explorer-sidebar__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.75rem;border-bottom:1px solid var(--border)}.explorer-sidebar__title{margin:0;font-size:.875rem;font-weight:600}.explorer-sidebar__controls{display:flex;align-items:center;gap:.25rem}.explorer-sidebar__empty{margin:0;padding:1rem;font-size:.8125rem;color:var(--text-muted)}.explorer-search{margin:.75rem;padding:.5rem .75rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);color:var(--text-primary);font-size:.875rem}.explorer-search--compact{margin:0;min-width:12rem}.explorer-select{padding:.25rem .5rem;border:1px solid var(--border);border-radius:.375rem;background:var(--bg-elevated);color:var(--text-primary);font-size:.75rem}.explorer-icon-button{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border:1px solid var(--border);border-radius:.375rem;background:var(--bg-elevated);color:var(--text-primary);cursor:pointer}.explorer-table-list{list-style:none;margin:0;padding:.5rem;overflow-y:auto;flex:1}.explorer-table-list__item{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.5rem .625rem;border:none;border-radius:.5rem;background:transparent;color:var(--text-primary);text-align:left;cursor:pointer}.explorer-table-list__item:hover{background:var(--bg-hover)}.explorer-table-list__item--active{background:var(--accent-soft);color:var(--accent)}.explorer-table-list__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.explorer-table-list__count{font-size:.75rem;color:var(--text-muted)}.explorer-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--border)}.explorer-toolbar__left,.explorer-toolbar__right{display:flex;align-items:center;gap:.5rem;min-width:0}.explorer-toolbar__right{justify-content:flex-end}.explorer-toolbar__title{margin:0;font-size:1rem}.explorer-toolbar__meta{font-size:.8125rem;color:var(--text-muted)}.explorer-tabs{display:inline-flex;padding:.125rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated)}.explorer-tabs__item{padding:.375rem .75rem;border:none;border-radius:.375rem;background:transparent;color:var(--text-muted);font-size:.8125rem;cursor:pointer}.explorer-tabs__item--active{background:var(--bg-surface);color:var(--text-primary);font-weight:600}.explorer-empty{padding:1.5rem 1rem;color:var(--text-muted);font-size:.875rem;text-align:center}.explorer-empty--panel{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;min-height:12rem;padding:2rem 1.5rem}.explorer-empty__title{margin:0;font-size:.9375rem;font-weight:600;color:var(--text-primary)}.explorer-empty__text{margin:0;font-size:.8125rem;color:var(--text-muted);max-width:24rem}.data-grid__row{cursor:default}.data-grid__row:hover td{background:var(--bg-hover)}.data-grid__sort{display:inline-flex;align-items:center;gap:.25rem;padding:0;border:none;background:transparent;color:inherit;font:inherit;font-weight:600;cursor:pointer}.data-grid__sort--active{color:var(--accent)}.data-grid__sort-indicator{font-size:.75rem}.data-grid__null{color:var(--text-subtle);font-style:italic}.pagination-bar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem 1rem;border-top:1px solid var(--border);background:var(--bg-elevated)}.pagination-bar__left,.pagination-bar__right{display:flex;align-items:center;gap:.5rem}.pagination-bar__label{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:var(--text-muted)}.pagination-bar__center{font-size:.8125rem;color:var(--text-muted)}.pagination-bar__count{margin-left:.375rem}.pagination-bar__button{padding:.375rem .75rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-surface);color:var(--text-primary);font-size:.8125rem;cursor:pointer}.pagination-bar__button:disabled{opacity:.5;cursor:not-allowed}.schema-tree__default{margin-left:auto;font-size:.75rem;color:var(--text-subtle)}.row-drawer__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;border:none;background:#00000059;cursor:pointer}.row-drawer{position:fixed;top:0;right:0;bottom:0;z-index:50;width:min(420px,100vw);display:flex;flex-direction:column;border-left:1px solid var(--border);background:var(--bg-surface);box-shadow:var(--shadow)}.row-drawer__header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:1rem;border-bottom:1px solid var(--border)}.row-drawer__label{margin:0 0 .25rem;font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.row-drawer__title{margin:0;font-size:1rem}.row-drawer__fields{margin:0;padding:1rem;overflow-y:auto}.row-drawer__field{display:grid;grid-template-columns:7rem 1fr;gap:.5rem;padding:.625rem 0;border-bottom:1px solid var(--border)}.row-drawer__field dt{margin:0;color:var(--text-muted);font-size:.8125rem}.row-drawer__field dd{margin:0;word-break:break-all}@media(max-width:900px){.explorer{grid-template-columns:1fr;grid-template-rows:auto 1fr}.explorer-sidebar{max-height:220px}.explorer-toolbar{grid-template-columns:1fr}.explorer-toolbar__center,.explorer-toolbar__right{justify-content:flex-start}}@media(max-width:767px){.panel--explorer{height:auto;min-height:calc(100dvh - 10rem)}}.button{padding:.5rem .875rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);color:var(--text-primary);font-size:.875rem;font-weight:600;cursor:pointer;white-space:nowrap}.button:hover:not(:disabled){border-color:var(--accent)}.button:disabled{opacity:.55;cursor:not-allowed}.button--primary{background:var(--accent);border-color:var(--accent);color:#fff}.button--primary:hover:not(:disabled){filter:brightness(1.05)}.button--ghost{background:transparent}.button--danger{background:var(--status-error);border-color:var(--status-error);color:#fff}.edit-mode-toggle{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);font-size:.8125rem;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none}.edit-mode-toggle--active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.edit-mode-toggle input{accent-color:var(--accent)}.transaction-bar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem 1rem;border-bottom:1px solid var(--border);background:var(--bg-elevated)}.transaction-bar__left{display:flex;align-items:center;gap:.75rem;min-width:0}.transaction-bar__status{font-size:.8125rem;font-weight:600;color:var(--text-muted)}.transaction-bar__status--open{color:var(--status-connected)}.transaction-bar__meta{font-size:.75rem;color:var(--text-muted)}.transaction-bar__actions{display:flex;align-items:center;gap:.5rem}.transaction-bar__error{max-width:16rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:.25rem .5rem;border:none;border-radius:.375rem;background:color-mix(in srgb,var(--status-error) 12%,transparent);color:var(--status-error);font-size:.75rem;cursor:pointer}.confirm-dialog__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;border:none;background:#00000073;z-index:40}.confirm-dialog{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(28rem,calc(100vw - 2rem));max-height:calc(100vh - 2rem);overflow:auto;padding:1.25rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-app);box-shadow:0 20px 40px #0003;z-index:50}.confirm-dialog__title{margin:0 0 .5rem;font-size:1.05rem}.confirm-dialog__message{margin:0 0 1rem;color:var(--text-muted);font-size:.9rem}.confirm-dialog__actions{display:flex;justify-content:flex-end;gap:.5rem}.insert-row-dialog{width:min(36rem,calc(100vw - 2rem))}.insert-row-dialog__fields{display:grid;gap:.75rem;margin-bottom:1rem;max-height:50vh;overflow:auto}.insert-row-dialog__field{display:grid;gap:.25rem}.insert-row-dialog__label{font-size:.8125rem;color:var(--text-muted)}.insert-row-dialog__required{color:var(--status-error);margin-left:.125rem}.insert-row-dialog__input,.row-drawer__input{width:100%;padding:.5rem .625rem;border:1px solid var(--border);border-radius:.375rem;background:var(--bg-elevated);color:var(--text-primary);font-size:.875rem}.row-drawer__footer{display:flex;justify-content:flex-end;gap:.5rem;padding:1rem;border-top:1px solid var(--border)}.row-drawer__pk{margin-left:.375rem;padding:.1rem .35rem;border-radius:.25rem;background:var(--accent-soft);color:var(--accent);font-size:.65rem;font-weight:700;vertical-align:middle}.explorer-toolbar__insert{margin-right:.5rem}.edit-mode-banner{padding:.5rem 1rem;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--accent) 12%,var(--bg-elevated));font-size:.8125rem;color:var(--text-primary)}.panel--sql-workspace{max-width:none;display:flex;flex-direction:column;min-height:0;height:calc(100dvh - 8rem)}.sql-workspace{display:grid;grid-template-columns:280px 1fr;gap:1rem;flex:1;min-height:0}.sql-workspace__main{display:flex;flex-direction:column;min-width:0;min-height:0;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);overflow:hidden}.sql-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem 1rem;border-bottom:1px solid var(--border);flex-wrap:wrap}.sql-toolbar__left,.sql-toolbar__right{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.sql-toolbar__secondary{padding:.5rem .875rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);color:var(--text-primary);font-size:.875rem;cursor:pointer}.sql-toolbar__secondary:disabled{opacity:.55;cursor:not-allowed}.sql-toolbar__hint{font-size:.75rem;color:var(--text-subtle)}.sql-editor-cm{border-bottom:1px solid var(--border)}.sql-editor-cm .cm-editor{height:100%}.sql-sidebar{display:flex;flex-direction:column;min-height:0;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);overflow:hidden}.sql-sidebar__tabs{margin:.75rem}.sql-sidebar__content{flex:1;overflow-y:auto;padding:0 .75rem .75rem}.sql-sidebar__empty{margin:0;padding:1rem 0;font-size:.8125rem;color:var(--text-muted)}.sql-sidebar__actions{display:flex;justify-content:flex-end;margin-bottom:.5rem}.sql-sidebar__link{border:none;background:transparent;color:var(--accent);font-size:.75rem;cursor:pointer}.sql-sidebar__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.375rem}.sql-sidebar__favorite{display:flex;align-items:stretch;gap:.25rem}.sql-sidebar__item{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;padding:.5rem .625rem;border:none;border-radius:.5rem;background:transparent;color:var(--text-primary);text-align:left;cursor:pointer}.sql-sidebar__item:hover{background:var(--bg-hover)}.sql-sidebar__item--error .sql-sidebar__item-title{color:var(--status-error)}.sql-sidebar__item-title{font-size:.8125rem;font-weight:600}.sql-sidebar__item-meta{font-size:.6875rem;color:var(--text-muted)}.sql-sidebar__delete{width:1.75rem;border:1px solid var(--border);border-radius:.375rem;background:var(--bg-elevated);color:var(--text-muted);cursor:pointer}.sql-results{flex:1;min-height:0;overflow:auto;padding:0 1rem 1rem}.results-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 0 .5rem;flex-wrap:wrap}.results-toolbar__actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.results-toolbar__status{font-size:.75rem;color:var(--status-connected)}.results-export{position:relative}.results-export__trigger{display:inline-flex;align-items:center;gap:.35rem}.results-export__menu{position:absolute;top:calc(100% + .35rem);left:0;z-index:30;min-width:9rem;margin:0;padding:.25rem;list-style:none;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-surface);box-shadow:var(--shadow)}.results-export__menu button{display:block;width:100%;padding:.5rem .75rem;border:none;border-radius:.375rem;background:transparent;color:var(--text-primary);font-size:.8125rem;text-align:left;cursor:pointer}.results-export__menu button:hover{background:var(--bg-hover)}.sql-dialog{position:fixed;top:50%;left:50%;z-index:60;width:min(420px,calc(100vw - 2rem));padding:1.25rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);box-shadow:var(--shadow);transform:translate(-50%,-50%)}.sql-dialog__title{margin:0 0 1rem;font-size:1rem}.sql-dialog__actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1rem}@media(max-width:900px){.sql-workspace{grid-template-columns:1fr;grid-template-rows:auto 1fr}.sql-sidebar{max-height:240px}}@media(max-width:767px){.panel--sql-workspace{height:auto;min-height:calc(100dvh - 10rem)}}.panel--workspace{max-width:none;display:flex;flex-direction:column;flex:1;min-height:0;height:100%}.panel--workspace-empty{align-items:center;justify-content:center}.workspace{display:grid;grid-template-columns:260px 1fr;gap:0;flex:1;min-height:0;height:100%;border-top:1px solid var(--border)}.workspace--explorer-collapsed{grid-template-columns:1fr}.workspace__explorer{min-height:0;border-right:1px solid var(--border);border-radius:0;background:var(--bg-surface);overflow:hidden}.workspace__main{display:flex;flex-direction:column;flex:1;min-width:0;min-height:0;border:none;border-radius:0;background:var(--bg-surface);overflow:hidden}.workspace__main-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-bottom:1px solid var(--border);background:var(--bg-elevated)}.workspace__toggle-explorer{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-surface);color:var(--text-muted);cursor:pointer;flex-shrink:0}.workspace__toggle-explorer:hover,.workspace__toggle-explorer[aria-pressed=true]{color:var(--accent);background:var(--accent-soft)}.workspace__editor-area{display:flex;flex-direction:column;flex:1;min-height:0}.workspace__editor-pane,.workspace__results-pane{display:flex;flex-direction:column;min-height:0;overflow:hidden}.workspace-empty{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin:.75rem;padding:.875rem 1rem;border:1px dashed var(--border);border-radius:.625rem;background:var(--bg-elevated)}.workspace-empty--inline{flex-shrink:0;margin:.5rem .75rem 0}.workspace-empty--centered{margin:0;max-width:28rem;text-align:center;justify-content:center;border-style:dashed}.workspace-empty__title{margin:0 0 .25rem;font-weight:600;font-size:.875rem}.workspace-empty__text{margin:0;color:var(--text-muted);font-size:.8125rem}.object-explorer{display:flex;flex-direction:column;height:100%;min-height:0}.object-explorer--empty{padding:1rem;color:var(--text-muted);font-size:.8125rem}.object-explorer__header{padding:.75rem;border-bottom:1px solid var(--border)}.object-explorer__title{margin:0;font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.object-explorer__tree{flex:1;overflow:auto;padding:.5rem}.object-explorer__node{margin:0}.object-explorer__node--nested{margin-left:.75rem}.object-explorer__summary{display:flex;align-items:center;gap:.375rem;padding:.375rem .25rem;cursor:pointer;list-style:none;font-size:.8125rem}.object-explorer__summary::-webkit-details-marker{display:none}.object-explorer__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.object-explorer__count{margin-left:auto;font-size:.6875rem;color:var(--text-subtle)}.object-explorer__hint{margin:.25rem 0 .5rem 1.5rem;font-size:.75rem;color:var(--text-muted)}.object-explorer__list{list-style:none;margin:0;padding:0 0 .5rem .5rem}.object-explorer__table{margin-bottom:.25rem}.object-explorer__table-row{display:flex;align-items:center;gap:.375rem;width:100%;padding:.25rem .375rem;border:none;border-radius:.375rem;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.object-explorer__table--active .object-explorer__table-row{background:var(--accent-soft);color:var(--accent)}.object-explorer__hint-block{margin:.25rem 0 .5rem 1.5rem;display:flex;flex-direction:column;align-items:flex-start;gap:.5rem}.object-explorer__header .explorer-search{margin-top:.5rem;width:100%}.object-explorer__menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;border:none;background:transparent;cursor:default}.object-explorer__menu{position:fixed;z-index:70;min-width:11rem;margin:0;padding:.25rem;list-style:none;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-surface);box-shadow:var(--shadow)}.object-explorer__menu button{display:block;width:100%;padding:.5rem .75rem;border:none;border-radius:.375rem;background:transparent;color:var(--text-primary);font-size:.8125rem;text-align:left;cursor:pointer}.object-explorer__menu button:hover,.object-explorer__table-row:hover{background:var(--bg-hover)}.object-explorer__table-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.object-explorer__actions{display:flex;flex-wrap:wrap;gap:.25rem;padding:0 0 .375rem 1.5rem}.object-explorer__action{padding:.125rem .375rem;border:1px solid var(--border);border-radius:.25rem;background:var(--bg-elevated);color:var(--text-muted);font-size:.6875rem;cursor:pointer}.object-explorer__action:hover{color:var(--accent);border-color:var(--accent)}.query-tabs{display:flex;align-items:center;gap:.25rem;min-width:0;overflow-x:auto;flex:1}.query-tabs__tab{display:inline-flex;align-items:center;border:1px solid transparent;border-radius:.375rem;background:transparent}.query-tabs__tab--active{border-color:var(--border);background:var(--bg-surface)}.query-tabs__button{padding:.375rem .625rem;border:none;background:transparent;color:var(--text-muted);font-size:.8125rem;cursor:pointer;white-space:nowrap}.query-tabs__tab--active .query-tabs__button{color:var(--text-primary);font-weight:600}.query-tabs__close{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;margin-right:.25rem;border:none;border-radius:.25rem;background:transparent;color:var(--text-subtle);cursor:pointer}.query-tabs__close:hover{background:var(--bg-hover);color:var(--text-primary)}.query-tabs__add{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border:1px dashed var(--border);border-radius:.375rem;background:transparent;color:var(--text-muted);cursor:pointer;flex-shrink:0}.query-tabs__add:hover{color:var(--accent);border-color:var(--accent)}.query-tabs__rename{width:7rem;padding:.25rem .5rem;border:1px solid var(--accent);border-radius:.25rem;background:var(--bg-surface);color:var(--text-primary);font-size:.8125rem}.resize-splitter{flex-shrink:0;height:6px;cursor:row-resize;background:var(--bg-elevated);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.resize-splitter:hover{background:var(--accent-soft)}.bottom-panel{display:flex;flex-direction:column;height:100%;min-height:0}.bottom-panel__tabs{display:flex;gap:.125rem;padding:.375rem .75rem 0;border-bottom:1px solid var(--border);background:var(--bg-elevated);overflow-x:auto}.bottom-panel__tab{padding:.375rem .75rem;border:none;border-bottom:2px solid transparent;background:transparent;color:var(--text-muted);font-size:.8125rem;cursor:pointer;white-space:nowrap}.bottom-panel__tab--active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.bottom-panel__tab--unread{color:var(--status-error);font-weight:600}.bottom-panel__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;min-width:0}.bottom-panel__breadcrumb{margin:0;padding:0 .75rem .375rem;font-size:.75rem;color:var(--text-muted)}.bottom-panel__content{flex:1;min-height:0;overflow:auto}.bottom-panel__messages,.bottom-panel__history{padding:.75rem 1rem}.bottom-panel__message,.bottom-panel__placeholder{margin:0;font-size:.875rem;color:var(--text-muted)}.table-browse-panel{display:flex;flex-direction:column;min-height:0;height:100%}.table-browse-panel__content{flex:1;min-height:0;overflow:auto;padding:0 1rem}.status-bar{display:flex;align-items:center;justify-content:flex-end;gap:1rem;padding:.375rem 1rem;border-top:1px solid var(--border);background:var(--bg-surface);font-size:.75rem;color:var(--text-muted)}.status-bar__left,.status-bar__right{display:flex;align-items:center;gap:.75rem;min-width:0}.status-bar__right{justify-content:flex-end}.status-bar__item{white-space:nowrap}.status-bar__separator{color:var(--text-subtle)}.shortcuts-dialog__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;border:none;background:#00000059;cursor:pointer}.shortcuts-dialog{position:fixed;top:50%;left:50%;z-index:80;width:min(420px,calc(100vw - 2rem));padding:1.25rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);box-shadow:var(--shadow);transform:translate(-50%,-50%)}.shortcuts-dialog__title{margin:0 0 1rem;font-size:1rem}.shortcuts-dialog__list{list-style:none;margin:0;padding:0}.shortcuts-dialog__row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem 0;border-bottom:1px solid var(--border);font-size:.875rem}.shortcuts-dialog__row:last-child{border-bottom:none}.shortcuts-dialog__keys{padding:.125rem .5rem;border:1px solid var(--border);border-radius:.375rem;background:var(--bg-elevated);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.75rem}.shortcuts-dialog__actions{display:flex;justify-content:flex-end;margin-top:1rem}.history-panel__tabs{margin-bottom:.75rem}.history-panel__content{min-height:0}.sql-editor-cm--fill{flex:1;min-height:0}.sql-toolbar__icon-button{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);color:var(--text-muted);cursor:pointer}.workspace-empty--tips{border-style:solid;background:transparent}.workspace__editor-pane .sql-editor-cm{flex:1;min-height:0}.query-results-grid{display:flex;flex-direction:column;min-height:0}.query-results-grid__meta{margin:0;padding:.5rem 1rem;font-size:.75rem;color:var(--text-muted)}.query-results-grid__cell{display:block;width:100%;padding:0;border:none;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.query-results-grid__cell:hover{color:var(--accent)}@media(max-width:1024px){.workspace{grid-template-columns:1fr;grid-template-rows:minmax(160px,28vh) 1fr}.workspace--explorer-collapsed{grid-template-rows:1fr}.workspace__explorer{max-height:28vh;border-right:none;border-bottom:1px solid var(--border)}}@media(max-width:767px){.status-bar__right{display:none}}.panel--overview{max-width:72rem;width:100%;margin:0 auto;flex:1;display:flex;flex-direction:column;gap:1rem;min-height:min-content}.panel--overview-empty{align-items:center;justify-content:center;min-height:100%}.overview-page{display:flex;flex-direction:column;gap:1rem;flex:1;min-height:0;width:100%;max-width:72rem;margin:0 auto}.overview-header{display:flex;flex-direction:column;gap:.25rem}.overview-header__subtitle{margin:0;font-size:.875rem;color:var(--text-muted)}.overview-hero{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1rem 1.25rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface)}.overview-hero__status{flex:1;min-width:min(100%,20rem)}.overview-hero__status-row{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem}.overview-hero__device{font-size:.875rem;color:var(--text-muted)}.overview-hero__context{margin:.35rem 0 0;font-size:.8125rem;color:var(--text-muted)}.overview-hero__database{margin:.5rem 0 0;font-size:.9375rem;font-weight:600}.overview-hero__database--success{color:var(--status-connected)}.overview-hero__database--warning{color:var(--status-warning)}.overview-hero__database--muted{color:var(--text-muted)}.overview-hero__hint,.overview-hero__error{margin:.5rem 0 0;font-size:.8125rem;line-height:1.5}.overview-hero__hint{color:var(--text-muted)}.overview-hero__error{color:var(--status-error)}.overview-hero__actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.overview-hero__primary,.overview-hero__secondary{padding:.5rem .875rem;border-radius:.5rem;font-size:.875rem;font-weight:600;cursor:pointer;border:1px solid transparent;min-height:2.5rem}.overview-hero__primary{background:var(--accent);border-color:var(--accent);color:#fff}.overview-hero__primary:hover:not(:disabled){filter:brightness(1.05)}.overview-hero__primary:disabled,.overview-hero__secondary:disabled{opacity:.5;cursor:not-allowed}.overview-hero__secondary{background:var(--bg-elevated);border-color:var(--border);color:var(--text-primary)}.overview-hero__secondary:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.overview-dashboard{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.overview-card{padding:1rem 1.25rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface);min-height:100%}.overview-card--placeholder{display:flex;flex-direction:column;gap:.5rem}.overview-card__title{margin:0 0 .75rem;font-size:.8125rem;color:var(--text-muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.overview-card__highlight{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem}.overview-card__headline{margin:0;font-size:1rem;font-weight:600}.overview-card__subline{margin:.125rem 0 0;font-size:.8125rem;color:var(--text-muted)}.overview-card__placeholder-title{margin:0;font-size:1rem;font-weight:600}.overview-card__placeholder-text{margin:0;font-size:.875rem;color:var(--text-muted);line-height:1.5}.overview-card__placeholder-action{align-self:flex-start;margin-top:.5rem}.overview-card__toggle{margin-top:.75rem;padding:0;border:none;background:transparent;color:var(--accent);font-size:.8125rem;font-weight:600;cursor:pointer}.overview-card__details{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--border)}.overview-card__links{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem}.overview-card__link{padding:.375rem .625rem;border:1px solid var(--border);border-radius:.375rem;background:var(--bg-elevated);color:var(--text-primary);font-size:.8125rem;font-weight:600;cursor:pointer}.overview-card__link:hover{border-color:var(--accent);color:var(--accent)}.overview-stats{margin:0}.overview-stats__row{display:flex;justify-content:space-between;gap:1rem;padding:.375rem 0;border-bottom:1px solid var(--border);font-size:.875rem}.overview-stats__row:last-child{border-bottom:none}.overview-stats__row dt{color:var(--text-muted)}.overview-stats__row dd{margin:0;text-align:right}.overview-tables{padding:1rem 1.25rem;border:1px solid var(--border);border-radius:.75rem;background:var(--bg-surface)}.overview-tables__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.75rem}.overview-tables__header .overview-card__title{margin:0}.overview-tables__list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));gap:.5rem}.overview-tables__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;padding:.625rem .75rem;border:1px solid var(--border);border-radius:.5rem;background:var(--bg-elevated);cursor:pointer;text-align:left}.overview-tables__item:hover{border-color:var(--accent);background:var(--accent-soft)}.overview-tables__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8125rem}.overview-tables__count{flex-shrink:0;font-size:.75rem;color:var(--text-muted)}.overview-footer{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem;padding:.5rem 0;font-size:.75rem;color:var(--text-subtle);border-top:1px solid var(--border);margin-top:auto}.overview-footer__sep{opacity:.6}.overview-empty{max-width:32rem;padding:2rem;text-align:center;border:1px dashed var(--border);border-radius:.75rem;background:var(--bg-surface)}.overview-empty__title{margin:0 0 .5rem;font-size:1.125rem}.overview-empty__text{margin:0 0 1rem;color:var(--text-muted);font-size:.875rem;line-height:1.5}.overview-empty__steps{margin:0;padding-left:1.25rem;text-align:left;color:var(--text-muted);font-size:.875rem;line-height:1.6}.copyable-value{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.5rem}.copyable-value__button{padding:.125rem .375rem;border:1px solid var(--border);border-radius:.25rem;background:var(--bg-elevated);color:var(--accent);font-size:.6875rem;font-weight:600;cursor:pointer}.getting-started--compact{padding:.625rem 1rem}.getting-started__compact-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem}.getting-started__compact-label{font-size:.875rem;font-weight:600}.getting-started__compact-actions{display:flex;gap:.5rem}.getting-started__progress{font-weight:500;color:var(--text-muted)}.getting-started__hint{margin:0;font-size:.8125rem;color:var(--text-muted)}@media(max-width:900px){.overview-dashboard{grid-template-columns:1fr}}@media(max-width:640px){.overview-hero__actions{width:100%}.overview-hero__primary,.overview-hero__secondary{flex:1}}*{box-sizing:border-box}html,body,#root{height:100%;min-height:100dvh}body{margin:0;font-family:Inter,system-ui,-apple-system,sans-serif;line-height:1.5;background:var(--bg-app);color:var(--text-primary)}#root{display:flex;flex-direction:column;min-height:0}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}