:root{--accent:#007aff;--bg:#f5f5f7;--surface:#fff;--surface-alt:#f2f2f7;--text:#1d1d1f;--text-2:#6e6e73;--border:#d2d2d7;--danger:#ff3b30;--success:#34c759;--radius:12px;--radius-s:8px;--font:-apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", "Segoe UI", Roboto, sans-serif;--fs:14px;--sp:8px;--shadow:0 1px 2px #0000000a, 0 4px 16px #0000000f;--blur:saturate(180%) blur(20px);--accent-soft:color-mix(in srgb, var(--accent) 12%, transparent);--mono:"SF Mono", ui-monospace, Menlo, Consolas, monospace}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font);font-size:var(--fs);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;line-height:1.4}h1,h2,h3{letter-spacing:-.01em;margin:0;font-weight:600}h1{font-size:1.7em}h2{font-size:1.3em}h3{font-size:1.05em}a{color:var(--accent);text-decoration:none}.muted{color:var(--text-2)}.small{font-size:.86em}.mono{font-family:var(--mono)}.row{gap:var(--sp);align-items:center;display:flex}.col{gap:var(--sp);flex-direction:column;display:flex}.grow{flex:1;min-width:0}.wrap{flex-wrap:wrap}.spacer{flex:1}.btn{height:calc(var(--sp) * 4);padding:0 calc(var(--sp) * 1.75);border:1px solid var(--border);border-radius:var(--radius-s);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:6px;font-weight:500;transition:background .15s,border-color .15s,transform 50ms,opacity .15s;display:inline-flex}.btn:hover{background:var(--surface-alt)}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.45;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:color-mix(in srgb, var(--accent) 88%, #000)}.btn-danger{color:var(--danger)}.btn-ghost{background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--accent-soft)}.btn-sm{height:calc(var(--sp) * 3.25);padding:0 calc(var(--sp) * 1.1);font-size:.92em}.btn-icon{width:calc(var(--sp) * 4);padding:0}.input,.select,textarea.input{width:100%;height:calc(var(--sp) * 4);padding:0 calc(var(--sp) * 1.25);border:1px solid var(--border);border-radius:var(--radius-s);background:var(--surface);color:var(--text);font:inherit;outline:none;transition:border-color .15s,box-shadow .15s}textarea.input{height:auto;min-height:80px;padding:var(--sp) calc(var(--sp) * 1.25);resize:vertical}.input:focus,.select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.input.invalid{border-color:var(--danger)}.select{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--text-2) 50%), linear-gradient(135deg, var(--text-2) 50%, transparent 50%);background-position:calc(100% - 15px) 52%,calc(100% - 10px) 52%;background-repeat:no-repeat;background-size:5px 5px;padding-right:28px}.checkbox{width:18px;height:18px;accent-color:var(--accent);cursor:pointer}.field{flex-direction:column;gap:4px;min-width:0;display:flex}.field>label{color:var(--text-2);font-size:.86em;font-weight:500}.field .req{color:var(--danger)}.form-grid{gap:calc(var(--sp) * 1.5) calc(var(--sp) * 2);grid-template-columns:repeat(auto-fill,minmax(240px,1fr));display:grid}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:calc(var(--sp) * 2);border:1px solid color-mix(in srgb, var(--border) 50%, transparent)}.card+.card{margin-top:calc(var(--sp) * 2)}.card-title{align-items:center;gap:var(--sp);margin-bottom:calc(var(--sp) * 1.5);display:flex}.table-wrap{border-radius:var(--radius-s);border:1px solid var(--border);background:var(--surface);overflow:auto}.table{border-collapse:collapse;width:100%}.table th{text-align:left;color:var(--text-2);padding:calc(var(--sp) * .9) calc(var(--sp) * 1.25);background:var(--surface-alt);z-index:1;white-space:nowrap;font-size:.86em;font-weight:500;position:sticky;top:0}.table td{padding:calc(var(--sp) * .9) calc(var(--sp) * 1.25);border-top:1px solid color-mix(in srgb, var(--border) 60%, transparent);vertical-align:middle}.table tr.clickable{cursor:pointer}.table tr.clickable:hover td,.table tr.selected td{background:var(--accent-soft)}.table td.num,.table th.num{text-align:right;font-variant-numeric:tabular-nums}.table td.edit{padding:3px 4px}.table td.edit .input,.table td.edit .select{height:calc(var(--sp) * 3.5);background:0 0;border-color:#0000}.table td.edit .input:focus,.table td.edit .select:focus{border-color:var(--accent);background:var(--surface)}.table tr.deleted td{color:var(--text-2);text-decoration:line-through}.table tfoot td{background:var(--surface-alt);font-weight:600}.sidebar{background:color-mix(in srgb, var(--surface) 72%, transparent);width:260px;height:100%;-webkit-backdrop-filter:var(--blur);border-right:1px solid var(--border);padding:calc(var(--sp) * 1.5) var(--sp);flex-shrink:0;overflow:auto}.sidebar .brand{padding:var(--sp) calc(var(--sp) * 1.25) calc(var(--sp) * 2);font-size:1.05em;font-weight:600}.sidebar .section{text-transform:uppercase;letter-spacing:.04em;color:var(--text-2);padding:calc(var(--sp) * 1.5) calc(var(--sp) * 1.25) 4px;font-size:.78em;font-weight:600}.nav-item{align-items:center;gap:var(--sp);padding:6px calc(var(--sp) * 1.25);border-radius:var(--radius-s);cursor:pointer;color:var(--text);-webkit-user-select:none;user-select:none;display:flex}.nav-item:hover{background:var(--accent-soft)}.nav-item.active{background:var(--accent);color:#fff}.nav-item.active .muted{color:#fffc}.toolbar{align-items:center;gap:var(--sp);padding:calc(var(--sp) * 1.25) calc(var(--sp) * 2.5);background:color-mix(in srgb, var(--bg) 80%, transparent);-webkit-backdrop-filter:var(--blur);border-bottom:1px solid color-mix(in srgb, var(--border) 60%, transparent);z-index:5;flex-wrap:wrap;display:flex;position:sticky;top:0}.tabs{background:var(--surface-alt);border-radius:var(--radius-s);flex-wrap:wrap;gap:2px;padding:2px;display:inline-flex}.tab{border-radius:calc(var(--radius-s) - 2px);cursor:pointer;color:var(--text-2);font-weight:500;font:inherit;background:0 0;border:none;padding:5px 12px}.tab.active{background:var(--surface);color:var(--text);box-shadow:0 1px 3px #0000001f}.badge{background:var(--surface-alt);color:var(--text-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:.8em;font-weight:600;display:inline-flex}.badge.ok{background:color-mix(in srgb, var(--success) 16%, transparent);color:color-mix(in srgb, var(--success) 70%, var(--text))}.badge.warn{background:color-mix(in srgb, var(--danger) 14%, transparent);color:var(--danger)}.badge.accent{background:var(--accent-soft);color:var(--accent)}.layout{height:100%;display:flex}.main{flex:1;min-width:0;height:100%;overflow:auto}.page{padding:calc(var(--sp) * 2.5);max-width:1400px}.empty{padding:calc(var(--sp) * 6);text-align:center;color:var(--text-2)}.tree{font-size:.95em}.tree-node{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:3px 8px;display:flex}.tree-node:hover{background:var(--accent-soft)}.tree-node.active{background:var(--accent);color:#fff}.tree-node.disabled{color:var(--text-2);opacity:.6;cursor:default}.tree-node .chev{text-align:center;width:12px;color:var(--text-2);font-size:10px;display:inline-block}.tree-node.active .chev{color:#fff}.tree-children{margin-left:14px}.overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:100;background:#00000040;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:calc(var(--radius) + 4px);flex-direction:column;width:min(720px,100%);max-height:90vh;display:flex;box-shadow:0 20px 60px #00000040}.modal-wide{width:min(1000px,100%)}.modal-head{padding:calc(var(--sp) * 2) calc(var(--sp) * 2.5) var(--sp);align-items:center;gap:var(--sp);display:flex}.modal-body{padding:var(--sp) calc(var(--sp) * 2.5);overflow:auto}.modal-foot{padding:calc(var(--sp) * 1.5) calc(var(--sp) * 2.5) calc(var(--sp) * 2);gap:var(--sp);justify-content:flex-end;display:flex}.toasts{z-index:200;flex-direction:column;gap:8px;max-width:440px;display:flex;position:fixed;bottom:20px;right:20px}.toast{background:color-mix(in srgb, var(--surface) 90%, transparent);-webkit-backdrop-filter:var(--blur);border-radius:var(--radius);white-space:pre-wrap;border-left:4px solid var(--accent);padding:12px 16px;box-shadow:0 8px 30px #0000002e}.toast.error{border-left-color:var(--danger)}.toast.ok{border-left-color:var(--success)}.ref-field{position:relative}.ref-field .input{cursor:pointer;padding-right:60px}.ref-field .ref-actions{gap:2px;display:flex;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.ref-field .ref-actions button{color:var(--text-2);cursor:pointer;font:inherit;background:0 0;border:none;border-radius:6px;padding:4px 6px}.ref-field .ref-actions button:hover{background:var(--accent-soft);color:var(--accent)}.login{justify-content:center;align-items:center;min-height:100%;padding:20px;display:flex}.login .card{width:360px;padding:32px}.code-editor{border:1px solid var(--border);border-radius:var(--radius-s);overflow:hidden}.issues{color:var(--danger);white-space:pre-wrap}.preview-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;display:grid}.swatch{border:1px solid var(--border);cursor:pointer;border-radius:8px;width:28px;height:28px;padding:0}.report-table .rg td{background:color-mix(in srgb, var(--accent) 6%, var(--surface));font-weight:600}.report-table .rg1 td{background:color-mix(in srgb, var(--accent) 3%, var(--surface))}.report-table .rg2 td,.report-table .rg3 td{background:var(--surface)}.report-table .rt td{background:var(--surface-alt);border-top:2px solid var(--border);font-weight:700}.report-table td.clickable{cursor:pointer;-webkit-user-select:none;user-select:none}.twisty{width:14px;color:var(--text-2);display:inline-block}.query-text{width:100%;min-height:220px;font-family:var(--mono);tab-size:4;white-space:pre;resize:vertical;font-size:13px;line-height:1.5}.sql-box{background:var(--surface-alt);padding:var(--sp);border-radius:var(--radius-s);white-space:pre-wrap;word-break:break-all;max-height:200px;margin:0;overflow:auto}.settings-list .select{max-width:260px}.print-only{display:none}@media print{.sidebar,.no-print,.toast-stack{display:none!important}.print-only{display:block}.layout,.main{height:auto;display:block;overflow:visible}.page{max-width:none;padding:0}.table-wrap{border:none;overflow:visible}.table th{position:static}body{background:#fff}}.obj-icon{object-fit:contain;opacity:.85;border-radius:3px;flex:none;justify-content:center;align-items:center;display:inline-flex}.nav-item.active .obj-icon{opacity:1}.sidebar .section.row{gap:6px}.icon-picker .row{flex-wrap:wrap;gap:6px}.icon-current{border:1px solid var(--border);border-radius:var(--radius-s);background:var(--surface);width:34px;height:34px;color:var(--text);cursor:pointer;justify-content:center;align-items:center;display:inline-flex}.icon-grid{border:1px solid var(--border);border-radius:var(--radius-s);background:var(--surface);grid-template-columns:repeat(auto-fill,34px);gap:4px;max-width:420px;margin-top:8px;padding:8px;display:grid}.icon-grid button{border-radius:var(--radius-s);width:34px;height:34px;color:var(--text);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex}.icon-grid button:hover{background:var(--accent-soft)}.icon-grid button.active{background:var(--accent);color:#fff}.form-layout{gap:calc(var(--sp) * 1.5) calc(var(--sp) * 2);display:grid}.form-layout>div{min-width:0}fieldset.readonly{opacity:.75;border:0;min-width:0;margin:0;padding:0}@media (width<=700px){.form-layout{grid-template-columns:1fr!important}.form-layout>div{grid-column:auto!important}}.form-designer{flex-direction:column;gap:12px;display:flex}.fd-group{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-alt);padding:10px}.fd-group-head{gap:6px;margin-bottom:8px}.fd-grid{gap:8px;min-height:48px;display:grid}.fd-field{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-s);cursor:grab;-webkit-user-select:none;user-select:none;padding:6px 10px}.fd-field:hover{border-color:var(--accent)}.fd-field.active{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.fd-field.hidden{opacity:.5;border-style:dashed}.fd-label{margin-bottom:4px;font-size:.85em;font-weight:500}.fd-input{color:var(--text-2);border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg);padding:3px 8px;font-size:.85em}.fd-empty{text-align:center;border:1px dashed var(--border);border-radius:var(--radius-s);grid-column:1/-1;padding:12px}.import-drop{border:2px dashed var(--border);border-radius:var(--radius);cursor:pointer;text-align:center;flex-direction:column;align-items:center;gap:6px;padding:40px 16px;display:flex}.import-drop:hover{border-color:var(--accent);background:var(--accent-soft)}.report-table tfoot td{background:var(--surface-alt);font-weight:700}.cmd-menu{display:inline-block;position:relative}.cmd-menu-list{z-index:30;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-s);flex-direction:column;min-width:200px;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 8px 24px #0000001f}.cmd-menu-list button{text-align:left;cursor:pointer;font:inherit;color:inherit;white-space:nowrap;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:8px 10px;display:flex}.cmd-menu-list button:hover{background:var(--surface-alt)}.form-commands{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.toolbar h2.grow{min-width:260px}
