:root{--ground: #0B0D12;--panel: #141824;--rule: #232A38;--text: #DDE3EC;--muted: #78829A;--accent: #8B9DFF;--pos: #6EDDB0;--neg: #F2777A;--font-mono: "IBM Plex Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;--font-sans: "IBM Plex Sans", system-ui, "Segoe UI", sans-serif;--fs-xs: 12px;--fs-sm: 13px;--fs-md: 14px;--fs-lg: 17px;--fs-xl: 22px;--fs-xxl: 30px;--row-h: 28px;--cell-pad: 6px 10px;--sidebar-w: 240px;--radius: 3px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--ground);color:var(--text);font-family:var(--font-sans);font-size:var(--fs-md);min-width:1280px}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation:none!important;transition:none!important}}:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}a{color:var(--accent)}button,select,input,textarea{font-family:var(--font-sans);font-size:var(--fs-sm);color:var(--text);background:var(--panel);border:1px solid var(--rule)}button{padding:4px 12px;border-radius:var(--radius);cursor:pointer}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{color:var(--muted);cursor:default}select,input{border-radius:0;padding:4px 8px}textarea{border-radius:0}label{color:var(--muted);font-size:var(--fs-sm)}.btn-accent{border-color:var(--accent);color:var(--accent);background:transparent}.btn-link{background:none;border:none;padding:0;color:var(--accent);cursor:pointer;font-size:var(--fs-sm)}.shell{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:12px;height:40px;padding:0 12px;background:var(--panel);border-bottom:1px solid var(--rule);flex:none}.brand{font-family:var(--font-mono);font-size:var(--fs-lg);font-weight:500;letter-spacing:.08em}.topbar .who{margin-left:auto;color:var(--muted);font-size:var(--fs-sm)}.body{display:flex;flex:1;min-height:0}.sidebar{width:var(--sidebar-w);flex:none;background:var(--panel);border-right:1px solid var(--rule);overflow-y:auto;padding:10px 0}.main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.content{flex:1;overflow-y:auto;padding:12px 16px;position:relative}.side-heading{padding:2px 12px 8px;color:var(--muted);font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.1em}.table-item{display:block;width:100%;text-align:left;background:none;border:none;border-left:2px solid transparent;border-radius:0;padding:5px 12px;cursor:pointer}.table-item:hover{background:var(--ground)}.table-item.selected{border-left-color:var(--accent);background:var(--ground)}.table-item .t-name{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-item .t-meta{color:var(--muted);font-size:var(--fs-xs)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--rule);margin-bottom:12px}.tab{background:none;border:none;border-bottom:2px solid transparent;border-radius:0;padding:6px 14px;color:var(--muted);font-size:var(--fs-md)}.tab:hover:not(:disabled){color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent)}.tab-danger{color:var(--neg)}.tab-danger.active{color:var(--neg);border-bottom-color:var(--neg)}.section{border:1px solid var(--rule);background:var(--panel);padding:10px 12px;margin:0 0 12px}.section-title{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.1em;color:var(--muted);margin:0 0 8px}.row{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.hint{color:var(--muted);font-size:var(--fs-sm)}.error{color:var(--neg);font-family:var(--font-mono);font-size:var(--fs-sm);margin:6px 0 0;white-space:pre-wrap}.ok{color:var(--pos);font-family:var(--font-mono);font-size:var(--fs-sm)}.stat-row{display:flex}.stat-card{flex:1;padding:6px 12px;border-right:1px solid var(--rule)}.stat-card:last-child{border-right:none}.stat-card .s-label{color:var(--muted);font-size:var(--fs-xs)}.stat-card .s-value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:var(--fs-lg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.grid-wrap{overflow:auto;border:1px solid var(--rule);max-height:calc(100vh - 320px)}table.grid{border-collapse:collapse;width:100%;font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:var(--fs-sm)}.grid th{position:sticky;top:0;z-index:1;background:var(--panel);color:var(--muted);font-weight:500;font-size:var(--fs-xs);text-align:left;height:var(--row-h);padding:var(--cell-pad);border-bottom:1px solid var(--rule);white-space:nowrap}.grid th.sortable{cursor:pointer}.grid th.sorted{color:var(--accent)}.grid td{height:var(--row-h);padding:var(--cell-pad);border-bottom:1px solid var(--rule);white-space:nowrap}.grid tr:hover td{background:var(--panel)}.grid .num{text-align:right}.grid .null-cell{color:var(--muted);font-style:italic}.grid td.empty{color:var(--muted);font-family:var(--font-mono)}.grid .total-cell{border-top:1px solid var(--muted);font-weight:500}.grid td.editable{cursor:text}.grid td.editable:hover{box-shadow:inset 0 0 0 1px var(--accent)}.grid td.editing{padding:0}.cell-editor{display:flex;align-items:stretch}.set-null{flex:none;padding:0 6px;border:1px solid var(--accent);border-left:none;border-radius:0;background:var(--panel);color:var(--muted);font-size:var(--fs-sm);cursor:pointer}.set-null:hover{color:var(--text)}.cell-editor .cell-input{flex:1;min-width:0}.cell-input{width:100%;height:calc(var(--row-h) - 2px);padding:0 9px;border:1px solid var(--accent);border-radius:0;background:var(--ground);color:var(--text);font-size:var(--fs-sm)}.grid th.rowctl,.grid td.rowctl{width:26px;padding:0;text-align:center}.row-del{background:none;border:none;border-radius:0;padding:0 4px;color:var(--muted);font-size:var(--fs-md);line-height:1;cursor:pointer}.row-del:hover{color:var(--neg);border-color:transparent}.write-panel{border-color:var(--neg)}.write-panel .section-title{color:var(--neg)}.danger-note{color:var(--neg);font-family:var(--font-mono);font-size:var(--fs-sm);margin:0 0 8px}.warn-note{color:var(--text);font-family:var(--font-mono);font-size:var(--fs-sm)}.btn-danger{border-color:var(--neg);color:var(--neg);background:transparent}.btn-danger:hover:not(:disabled){background:var(--neg);color:var(--ground)}.preview-box{border:1px solid var(--rule);border-left:2px solid var(--neg);background:var(--ground);padding:8px 10px;margin:8px 0;font-family:var(--font-mono);font-size:var(--fs-sm)}.audit-table{font-size:var(--fs-sm)}.audit-table .act-insert{color:var(--pos)}.audit-table .act-delete{color:var(--neg)}.audit-table .act-update{color:var(--accent)}.audit-val{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:bottom}.pager{display:flex;align-items:center;gap:10px;margin-top:8px;color:var(--muted);font-family:var(--font-mono);font-size:var(--fs-sm)}.loading-line{position:absolute;top:0;left:0;height:2px;width:100%;overflow:hidden;z-index:2}.loading-line:after{content:"";display:block;height:100%;width:40%;background:var(--accent);animation:loading-sweep 1s linear infinite}@keyframes loading-sweep{0%{transform:translate(-100%)}to{transform:translate(250%)}}@media (prefers-reduced-motion: reduce){.loading-line:after{width:100%}}.querybar{flex:none;background:var(--panel);border-top:1px solid var(--rule);font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--muted)}.querybar .qb-line{display:flex;align-items:center;gap:8px;height:28px;padding:0 12px;cursor:pointer;overflow:hidden}.querybar .qb-line:hover{color:var(--text)}.querybar .qb-caret{color:var(--accent);flex:none}.querybar .qb-sql{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;text-align:left}.querybar .qb-copy{flex:none;font-family:var(--font-mono);font-size:var(--fs-xs);padding:1px 8px;background:none;border:1px solid var(--rule);border-radius:var(--radius);color:var(--muted)}.querybar .qb-copy:hover{color:var(--text);border-color:var(--accent)}.querybar .qb-expanded{max-height:40vh;overflow-y:auto;border-top:1px solid var(--rule);padding:8px 12px}.querybar .qb-block{margin:0 0 10px}.querybar .qb-label{font-size:var(--fs-xs);letter-spacing:.1em;color:var(--muted);margin:0 0 3px}.querybar .qb-text{margin:0;white-space:pre-wrap;color:var(--text);font-size:var(--fs-sm);line-height:1.45}.sql-editor{width:100%;font-family:var(--font-mono);font-size:var(--fs-md);line-height:1.5;background:var(--ground);color:var(--text);border:1px solid var(--rule);padding:8px 10px;resize:vertical}.login-wrap{height:100%;display:flex;align-items:center;justify-content:center;background:var(--ground)}.login-card{width:320px;background:var(--panel);border:1px solid var(--rule);padding:24px}.login-card h1{font-family:var(--font-mono);font-size:var(--fs-xl);font-weight:500;letter-spacing:.08em;margin:0 0 16px}.login-card label{display:block;margin:0 0 4px}.login-card input{width:100%;margin:0 0 12px;font-family:var(--font-mono)}.chart-box{width:100%;height:320px}.chart-note{color:var(--muted);font-size:var(--fs-xs);margin-top:4px}.side-heading-row{display:flex;align-items:baseline;justify-content:space-between}.side-add{background:none;border:none;color:var(--accent);font-family:var(--font-mono);font-size:var(--fs-xs);cursor:pointer;padding:0}.side-add:hover{text-decoration:underline}.new-folder{padding:0 12px 6px}.new-folder input{width:100%;font-family:var(--font-mono);font-size:var(--fs-xs)}.folder{margin-bottom:2px}.folder-head{display:flex;align-items:center;gap:6px;width:100%;background:none;border:none;color:var(--text);font-family:var(--font-mono);font-size:var(--fs-sm);text-align:left;padding:4px 12px;cursor:pointer}.folder-head:hover{background:var(--ground)}.folder-caret{color:var(--muted);width:12px}.folder-name{flex:1;letter-spacing:.04em}.folder-count{color:var(--muted);font-size:var(--fs-xs)}.folder-empty{padding:0 12px 4px 30px}.folder-reserved{border-left:2px solid var(--accent)}.folder-reserved .folder-name{color:var(--accent)}.file-item{padding-left:30px}.file-item .t-name{display:flex;align-items:center;gap:6px}.light{display:inline-block;width:7px;height:7px;border-radius:50%;flex:none}.light-ok{background:var(--pos);animation:light-pulse 1.6s ease-in-out infinite}.light-bad{background:var(--neg)}.light-off{background:var(--muted);opacity:.35}@keyframes light-pulse{0%,to{opacity:1}50%{opacity:.25}}@media (prefers-reduced-motion: reduce){.light-ok{animation:none}}.ctx-menu{position:fixed;z-index:40;min-width:180px;max-height:calc(100vh - 16px);overflow-y:auto;background:var(--panel);border:1px solid var(--rule);padding:4px 0;box-shadow:none}.ctx-item{display:block;width:100%;background:none;border:none;color:var(--text);font-family:var(--font-mono);font-size:var(--fs-sm);text-align:left;padding:5px 12px;cursor:pointer}.ctx-item:hover{background:var(--ground);color:var(--accent)}.ctx-title{color:var(--muted);font-size:var(--fs-xs);padding:4px 12px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0000008c;display:flex;align-items:center;justify-content:center}.modal{width:440px;max-width:90vw;background:var(--panel);border:1px solid var(--rule);padding:16px;font-size:var(--fs-sm)}.modal-title{font-size:var(--fs-md);margin-bottom:10px;letter-spacing:.03em}.modal p{margin:0 0 10px;line-height:1.45}.modal-hint{color:var(--muted);font-size:var(--fs-xs)}.modal input{width:100%;font-family:var(--font-mono)}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.modal-actions .danger{color:var(--neg);border-color:var(--neg)}.modal-actions .danger:disabled{color:var(--muted);border-color:var(--rule)}.bottom-tabs-wrap{border-top:1px solid var(--rule)}.tab-folder-label{color:var(--muted);font-size:var(--fs-xs);padding:3px 12px 0;letter-spacing:.05em}.bottom-tabs{display:flex;align-items:stretch;overflow-x:auto;padding:0 8px}.btab{display:inline-flex;align-items:center;gap:6px;padding:5px 4px 5px 10px;font-size:var(--fs-sm);color:var(--muted);border-right:1px solid var(--rule);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none}.btab:first-child{border-left:1px solid var(--rule)}.btab:hover{color:var(--text)}.btab.active{color:var(--accent);box-shadow:inset 0 2px 0 var(--accent)}.btab-close{background:none;border:none;color:var(--muted);font-size:var(--fs-sm);cursor:pointer;padding:0 6px;line-height:1}.btab-close:hover{color:var(--neg)}.file-item.previewing .t-name{text-decoration:underline dotted;text-underline-offset:3px}.preview-hint{color:var(--muted)}.toolbar{gap:8px;align-items:center}.filters-chip{display:inline-flex;align-items:center;gap:8px;font-size:var(--fs-xs);color:var(--accent);border:1px solid var(--rule);padding:2px 8px}.grid th.has-menu{position:relative}.th-label{cursor:default}.sortable-label{cursor:pointer}.th-menu{position:relative;display:inline-flex;margin-left:4px}.th-arrow{background:none;border:1px solid transparent;color:var(--muted);font-size:var(--fs-xs);cursor:pointer;padding:0 3px;line-height:1}.th-arrow:hover{color:var(--text);border-color:var(--rule)}.th-arrow.filtered{color:var(--accent);border-color:var(--accent)}.th-panel{position:absolute;top:100%;left:0;z-index:45;min-width:220px;max-width:300px;background:var(--panel);border:1px solid var(--rule);padding:4px 0;text-align:left;font-weight:400}.thm-item{display:block;width:100%;background:none;border:none;color:var(--text);font-family:var(--font-mono);font-size:var(--fs-sm);text-align:left;padding:5px 12px;cursor:pointer}.thm-item:hover{background:var(--ground);color:var(--accent)}.thm-clear{color:var(--neg)}.thm-sep{border-top:1px solid var(--rule);margin:4px 0}.thm-back{background:none;border:none;color:var(--muted);font-family:var(--font-mono);font-size:var(--fs-xs);cursor:pointer;padding:4px 12px}.thm-form{display:flex;flex-direction:column;gap:6px;padding:6px 12px}.thm-form select,.thm-form input{width:100%;font-family:var(--font-mono)}.thm-between{display:flex;gap:6px}.thm-between input{width:50%}.thm-checklist{padding:6px 12px;display:flex;flex-direction:column;gap:6px}.thm-search{width:100%}.thm-trunc{color:var(--muted);font-size:var(--fs-xs);margin:0}.thm-actions{display:flex;gap:10px}.thm-list{max-height:220px;overflow-y:auto;border:1px solid var(--rule);padding:4px 6px}.thm-check{display:flex;align-items:center;gap:6px;padding:2px 0;font-size:var(--fs-sm);cursor:pointer}.thm-check span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.thm-blanks{border-top:1px solid var(--rule);margin-top:4px;padding-top:4px;color:var(--muted)}.thm-apply{align-self:flex-start}.date-tree{font-size:var(--fs-sm)}.dt-row{display:flex;align-items:center;gap:4px;padding:1px 0}.dt-caret{background:none;border:none;color:var(--muted);cursor:pointer;width:14px;padding:0}.dt-month{padding-left:16px}.dt-day{padding-left:32px}.dt-mlabel{color:var(--muted)}.grid td.fill-green{background:#6eddb0d9;color:#0b0d12}.grid td.fill-yellow{background:#e8c85ae6;color:#0b0d12}.grid td.fill-red{background:#f2777ad9;color:#0b0d12}.grid td.fill-green.null-cell,.grid td.fill-yellow.null-cell,.grid td.fill-red.null-cell{color:#3a3f4a}.grid td.fmt-bold{font-weight:700}.grid td.cell-selected{outline:1px solid var(--accent);outline-offset:-1px}.format-bar{gap:8px;align-items:center;margin:8px 0}.format-hint{margin:8px 0}.format-target{color:var(--muted);font-size:var(--fs-xs)}.swatch{width:18px;height:18px;border:1px solid var(--rule);cursor:pointer;padding:0}.swatch-green{background:#6eddb08c}.swatch-yellow{background:#e2c55e8c}.swatch-red{background:#f2777a8c}.swatch-none{background:var(--ground)}.cf-chip{width:12px;height:12px;display:inline-block;cursor:default}.cf-row{gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:8px}.cf-input{width:84px}.cf-bold{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs)}.cf-list{max-height:240px;overflow-y:auto;border-top:1px solid var(--rule);padding-top:8px}.cf-item{gap:8px;align-items:center;padding:3px 0}.cf-desc{flex:1;font-size:var(--fs-sm)}.cf-others{margin-top:8px}.thm-colour{display:flex;align-items:center;gap:8px}.notepad{display:flex;flex-direction:column;height:100%;min-height:0}.notepad-bar{align-items:center;gap:10px;margin-bottom:8px}.notepad-title{font-size:var(--fs-lg);letter-spacing:.04em}.notepad-status{color:var(--muted);font-size:var(--fs-xs);min-width:60px}.notepad-spacer{flex:1}.notepad-area{flex:1;min-height:320px;width:100%;resize:none;background:var(--ground);color:var(--text);border:1px solid var(--rule);padding:10px 12px;font-size:var(--fs-sm);line-height:1.5;-moz-tab-size:4;tab-size:4}.notepad-area:focus{outline:1px solid var(--accent);outline-offset:-1px}
