:root{--bg:#f5f5f3;--surface:#fff;--surface-2:#fafaf8;--text:#1b1b1a;--muted:#6b6a66;--border:#e1e0d9;--border-strong:#c9c7be;--accent:#2a78d6;--accent-soft:#e6f0fb;--danger:#c43c3b;--danger-soft:#fbeaea;--success:#1f8a4c;--success-soft:#e5f4ea;--warning:#a86a00;--warning-soft:#fbf1dc;--radius:8px;--sidebar:220px;color:var(--text);background:var(--bg);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:15px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#161615;--surface:#1f1f1e;--surface-2:#262624;--text:#f0efec;--muted:#a3a29b;--border:#33332f;--border-strong:#4a4a45;--accent:#3987e5;--accent-soft:#1b2b40;--danger:#e66767;--danger-soft:#3a1f1f;--success:#4cc27f;--success-soft:#16301f;--warning:#e0a33a;--warning-soft:#352a14;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#161615;--surface:#1f1f1e;--surface-2:#262624;--text:#f0efec;--muted:#a3a29b;--border:#33332f;--border-strong:#4a4a45;--accent:#3987e5;--accent-soft:#1b2b40;--danger:#e66767;--danger-soft:#3a1f1f;--success:#4cc27f;--success-soft:#16301f;--warning:#e0a33a;--warning-soft:#352a14;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{background:var(--bg);margin:0}a{color:var(--accent)}h1{margin:0;font-size:1.35rem;font-weight:600}h2{margin:0;font-size:1.05rem;font-weight:600}.muted{color:var(--muted)}code{font-family:ui-monospace,Consolas,monospace;font-size:.88em}input,select,textarea,button{font:inherit;color:var(--text)}input,select,textarea{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);min-width:0;padding:.5rem .65rem}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:-1px}textarea{resize:vertical;font-family:ui-monospace,Consolas,monospace;font-size:.9em}.btn{border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--surface);cursor:pointer;white-space:nowrap;padding:.45rem .85rem}.btn:hover:not(:disabled){background:var(--surface-2)}.btn:disabled{opacity:.55;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent);filter:brightness(1.08)}.btn-danger{color:var(--danger)}.btn-ghost{background:0 0;border-color:#0000}.btn-small{padding:.25rem .55rem;font-size:.85rem}.form{flex-direction:column;gap:.85rem;display:flex}.form-row{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.85rem;display:grid}.field{border:0;flex-direction:column;gap:.3rem;min-width:0;margin:0;padding:0;display:flex}.field>label,.field>legend,.field .label{color:var(--muted);padding:0;font-size:.85rem}.checkbox{cursor:pointer;align-items:center;gap:.4rem;font-size:.92rem;display:inline-flex}.checkbox-row{flex-wrap:wrap;gap:.4rem 1rem;display:flex}.multipick{border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:.3rem;max-height:180px;padding:.5rem .65rem;display:flex;overflow:auto}.secret{align-items:center;gap:.5rem;display:flex}.secret code{border-radius:var(--radius);background:var(--surface-2);border:1px solid var(--border);overflow-wrap:anywhere;flex:1;padding:.5rem .65rem}.shell{grid-template-columns:var(--sidebar) 1fr;min-height:100vh;display:grid}.sidebar{background:var(--surface);border-right:1px solid var(--border);height:100vh;padding:1rem .75rem;position:sticky;top:0;overflow-y:auto}.brand{color:var(--text);padding:.25rem .5rem 1rem;font-size:1.1rem;font-weight:700;text-decoration:none;display:block}.nav-section{flex-direction:column;margin-bottom:1rem;display:flex}.nav-title{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:0 .5rem .35rem;font-size:.75rem}.nav-section a{border-radius:var(--radius);color:var(--text);padding:.45rem .5rem;text-decoration:none}.nav-section a:hover{background:var(--surface-2)}.nav-section a.active{background:var(--accent-soft);color:var(--accent);font-weight:500}.main{flex-direction:column;min-width:0;display:flex}.topbar{background:var(--surface);border-bottom:1px solid var(--border);z-index:5;align-items:center;gap:.75rem;padding:.6rem 1.25rem;display:flex;position:sticky;top:0}.scope-pickers{flex:1;gap:.5rem;min-width:0;display:flex}.scope-pickers select{max-width:260px}.user{align-items:center;gap:.25rem;display:flex}.user-name{color:var(--text);font-weight:500;text-decoration:none}.menu-toggle{display:none}.content{flex-direction:column;gap:1rem;width:100%;max-width:1400px;padding:1.25rem;display:flex}@media (width<=800px){.shell{grid-template-columns:1fr}.sidebar{z-index:20;width:260px;transition:left .15s;position:fixed;left:-270px;box-shadow:0 0 24px #00000040}.nav-open .sidebar{left:0}.menu-toggle{display:inline-block}.topbar{flex-wrap:wrap;padding:.5rem 16px}.scope-pickers{flex-basis:100%;order:3}.scope-pickers select{flex:1;max-width:none}.content{padding:16px}}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.page-header p{margin:.25rem 0 0}.actions{flex-wrap:wrap;gap:.5rem;display:flex}.toolbar{flex-wrap:wrap;align-items:flex-end;gap:.6rem;display:flex}.toolbar .field{min-width:150px}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.1rem 1.25rem}.card h2{margin-bottom:.75rem}.cards{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;display:grid}.stat{font-size:1.6rem;font-weight:600}.empty{text-align:center;color:var(--muted);background:var(--surface);border:1px dashed var(--border);border-radius:12px;padding:2rem 1rem}.loading{color:var(--muted);padding:2rem}.notice{border-radius:var(--radius);padding:.65rem .85rem;font-size:.92rem}.notice-error{background:var(--danger-soft);color:var(--danger)}.notice-info{background:var(--accent-soft);color:var(--accent)}.notice-success{background:var(--success-soft);color:var(--success)}.badge{background:var(--surface-2);border:1px solid var(--border);white-space:nowrap;border-radius:6px;padding:.1rem .45rem;font-size:.78rem;display:inline-block}.badge-success{background:var(--success-soft);color:var(--success);border-color:#0000}.badge-warning{background:var(--warning-soft);color:var(--warning);border-color:#0000}.badge-danger{background:var(--danger-soft);color:var(--danger);border-color:#0000}.badge-accent{background:var(--accent-soft);color:var(--accent);border-color:#0000}.tags{flex-wrap:wrap;gap:.25rem;display:inline-flex}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:.9rem}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.55rem .75rem}tr:last-child td{border-bottom:0}th{color:var(--muted);background:var(--surface-2);white-space:nowrap;font-weight:500}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}td.mono{font-family:ui-monospace,Consolas,monospace;font-size:.85rem}.col-actions{text-align:right;white-space:nowrap;width:1%}.col-actions .btn+.btn{margin-left:.3rem}.pager{justify-content:flex-end;align-items:center;gap:.75rem;display:flex}.kv{color:var(--muted);font-size:.82rem}.kv b{color:var(--text);font-weight:500}.tabs{border-bottom:1px solid var(--border);gap:.25rem;display:flex}.tabs button{cursor:pointer;color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;padding:.55rem .9rem}.tabs button.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:500}.dash-tabs{margin-bottom:.75rem;overflow-x:auto}.dash-tabs button{white-space:nowrap}.modal-backdrop{z-index:50;background:#0006;justify-content:center;align-items:flex-start;padding:6vh 16px;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--surface);border-radius:12px;width:min(540px,100%);box-shadow:0 12px 40px #0000004d}.modal-wide{width:min(860px,100%)}.modal-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:.9rem 1.1rem;display:flex}.modal-body{flex-direction:column;gap:.85rem;padding:1.1rem;display:flex}.modal-foot{border-top:1px solid var(--border);justify-content:flex-end;gap:.5rem;padding:.8rem 1.1rem;display:flex}pre.json{background:var(--surface-2);border-radius:var(--radius);max-height:60vh;margin:0;padding:.75rem;font-size:.82rem;overflow:auto}.login{place-items:center;min-height:100vh;padding:16px;display:grid}.login form{flex-direction:column;gap:.9rem;width:min(360px,100%);display:flex}.login h1{margin:0 0 .25rem}.login label{color:var(--muted);flex-direction:column;gap:.3rem;font-size:.9rem;display:flex}.login .error{color:var(--danger);margin:0;font-size:.9rem}.files-layout{grid-template-columns:260px 1fr;align-items:start;gap:1rem;display:grid}.tree{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:.5rem}.tree ul{margin:0;padding-left:.9rem;list-style:none}.tree>ul{padding-left:0}.tree button{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;width:100%;padding:.35rem .5rem}.tree button:hover{background:var(--surface-2)}.tree button.active{background:var(--accent-soft);color:var(--accent)}.tree .tree-root{font-weight:600}.subfolders{flex-wrap:wrap;gap:.5rem;display:flex}.subfolder{font:inherit;color:inherit;background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:8px;align-items:center;gap:.4rem;padding:.45rem .8rem;display:inline-flex}.subfolder:hover{border-color:var(--accent)}.dropzone{border:2px dashed var(--border-strong);text-align:center;color:var(--muted);border-radius:12px;padding:1rem}.dropzone.over{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.progress{background:var(--border);border-radius:3px;height:6px;overflow:hidden}.progress>div{background:var(--accent);height:100%}@media (width<=800px){.files-layout{grid-template-columns:1fr}}.source-input{gap:.35rem;min-width:0;display:flex}.source-input select{flex:none;max-width:140px}.source-input input{flex:1;min-width:60px}.source-input input.format{flex:0 110px}.keyed-source{grid-template-columns:minmax(80px,140px) 1fr auto;align-items:end;gap:.35rem;margin-bottom:.35rem;display:grid}.keyed-source .field .label{display:none}.grid-view{max-height:420px;overflow:auto}.grid-view td{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;max-width:220px;overflow:hidden}.grid-view td:hover{background:var(--accent-soft)}.grid-view thead th,.grid-view tbody th{background:var(--surface-2);text-align:center;color:var(--muted);font-weight:500;position:sticky}.grid-view thead th{z-index:1;top:0}.grid-view tbody th{left:0}.editor-frame{border:1px solid var(--border);border-radius:12px;overflow:hidden}.note-input{width:160px}h2{margin-top:.5rem}@media (width<=800px){.keyed-source{grid-template-columns:1fr}.note-input{width:100%}}.dash-card{color:var(--text);flex-direction:column;gap:.35rem;text-decoration:none;display:flex}.dash-card:hover{border-color:var(--accent)}.dash-card p{margin:0}.dash-grid{min-height:200px}.dash-grid.device-frame{box-sizing:border-box;border:1px solid var(--border-strong);background:var(--surface-2);border-radius:18px;width:100%;margin:0 auto;padding:12px}.segmented{border:1px solid var(--border);border-radius:8px;display:inline-flex;overflow:hidden}.segmented button{cursor:pointer;color:var(--muted);background:0 0;border:0;padding:.4rem .75rem}.segmented button+button{border-left:1px solid var(--border)}.segmented button.active{background:var(--surface-2);color:var(--accent);font-weight:500}.widget{background:var(--surface);border:1px solid var(--border);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.dash-grid.editing .widget{border-style:dashed;border-color:var(--border-strong)}.widget-head{justify-content:space-between;align-items:center;gap:.5rem;min-height:34px;padding:.5rem .75rem .25rem;display:flex}.dash-grid.editing .widget-head{cursor:move;background:var(--surface-2);padding-bottom:.5rem}.widget-title{text-overflow:ellipsis;white-space:nowrap;font-size:.92rem;font-weight:600;overflow:hidden}.widget-tools{cursor:default;gap:.15rem;display:flex}.widget-body{flex:1;min-height:0;padding:.25rem .5rem .5rem;position:relative}.echart{position:absolute;inset:.25rem .5rem .5rem}.widget-message{height:100%;color:var(--muted);text-align:center;place-items:center;padding:.5rem;font-size:.9rem;display:grid}.widget-message.error{color:var(--danger)}.widget-text{white-space:pre-wrap;height:100%;padding:.25rem;font-size:.95rem;line-height:1.55;overflow:auto}.widget-table{height:100%;overflow:auto}.widget-table table{font-size:.85rem}.widget-table th,.widget-table td{padding:.35rem .5rem}.widget-table thead th{position:sticky;top:0}.widget-table tfoot td,.widget-table tfoot th{border-top:1px solid var(--border-strong)}.widget-preview{flex-direction:column;height:340px;display:flex;position:relative}.widget-preview .echart{inset:.5rem}.kpi{flex-direction:column;justify-content:center;gap:.25rem;height:100%;padding:0 .25rem;display:flex}.kpi-value{font-variant-numeric:tabular-nums;font-size:clamp(1.6rem,4vw,2.4rem);font-weight:600;line-height:1.1}.kpi-delta{font-size:.85rem}.kpi-delta.up{color:var(--success)}.kpi-delta.down{color:var(--danger)}.sparkline{width:100%;height:36px}.progress-list{flex-direction:column;justify-content:center;gap:.75rem;height:100%;display:flex;overflow:auto}.progress-label{justify-content:space-between;gap:.5rem;margin-bottom:.25rem;font-size:.85rem;display:flex}.progress-list .progress{border-radius:5px;height:10px}.type-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:.5rem;margin-bottom:.75rem;display:grid}.type-card{text-align:left;border:1px solid var(--border);background:var(--surface);cursor:pointer;border-radius:10px;flex-direction:column;gap:.2rem;padding:.6rem .75rem;font-size:.85rem;display:flex}.type-card:hover{border-color:var(--accent);background:var(--accent-soft)}.react-grid-item.react-grid-placeholder{background:var(--accent);opacity:.15;border-radius:12px}.react-grid-item>.react-resizable-handle:after{border-color:var(--muted)}.card.rule{gap:10px;margin-bottom:12px;padding:14px 16px;display:grid}.checks{flex-wrap:wrap;gap:6px 18px;display:flex}.rule-actions{justify-content:flex-end;display:flex}.stack-sm{gap:4px;display:grid}.card.consent{gap:12px;width:min(460px,100%);display:grid}.consent-actions{justify-content:flex-end;gap:8px;display:flex}.dash-edit{grid-template-columns:minmax(0,1fr) 240px;align-items:start;gap:1rem;display:grid}@media (width<=900px){.dash-edit{grid-template-columns:1fr}}.dash-edit .dash-canvas{min-width:0;overflow-x:auto}.toolbox{background:var(--surface);border:1px solid var(--border);border-radius:12px;max-height:calc(100vh - 2rem);padding:.75rem;position:sticky;top:1rem;overflow:auto}.toolbox h2{margin:0 0 .25rem;font-size:1rem}.toolbox h3{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:.9rem 0 .35rem;font-size:.8rem}.toolbox>p{margin:0;font-size:.82rem}.toolbox-items{grid-template-columns:1fr 1fr;gap:.35rem;display:grid}.toolbox-item{text-align:center;font:inherit;border:1px solid var(--border);background:var(--surface-2);color:inherit;cursor:grab;border-radius:8px;flex-direction:column;align-items:center;gap:.25rem;padding:.45rem .35rem .4rem;font-size:.8rem;line-height:1.2;display:flex}.toolbox-item .type-preview{pointer-events:none;flex:none;width:100%;max-width:72px;height:auto}.toolbox-item:hover:not(:disabled) .type-preview{transform:scale(1.04)}.type-preview{transition:transform .15s ease-out}.toolbox-item:hover:not(:disabled){border-color:var(--accent)}.toolbox-item:disabled{opacity:.45;cursor:not-allowed}.grid-host{min-height:100%}.grid-hint{color:var(--muted);text-align:center;pointer-events:none;padding:1rem;font-size:.9rem}.dash-grid.editing .grid-hint{margin-top:-200px}.widget-group{background:0 0}.widget-group>.widget-body{padding:.5rem;overflow:auto}.widget-animating>.widget-body{overflow:hidden}.react-grid-item:has(.react-draggable-dragging){z-index:5}.react-draggable-dragging>.widget{box-shadow:0 8px 24px #0000002e}.ghosting .react-draggable-dragging,.ghosting .group-body .react-grid-placeholder{opacity:0!important}.ghosting .widget-group>.widget-body,.ghosting .accordion-panel-body{overflow:hidden}.drag-ghost{z-index:1000;pointer-events:none;background:var(--surface);border:1px solid var(--accent);border-radius:10px;align-items:center;gap:.5rem;max-width:260px;padding:.4rem .7rem .4rem .45rem;font-size:.85rem;font-weight:600;display:flex;position:fixed;top:0;left:0;transform:translate(-9999px,-9999px);box-shadow:0 10px 28px #00000038}.drag-ghost .type-preview{flex:none;width:48px;height:30px}.drag-ghost span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dash-grid.drop-out>.grid-host{outline:2px dashed var(--accent);outline-offset:4px;border-radius:12px}.group-body{min-height:100%;position:relative}.group-body .grid-hint{place-items:center;margin-top:0;display:grid;position:absolute;inset:0}.dash-grid.editing .widget-group{border-style:solid}.widget-filter>.widget-body{overflow:visible}.filter-module{flex-wrap:wrap;align-items:flex-end;gap:.5rem;height:100%;display:flex}.filter-module .field{flex:1;min-width:130px}.badges{flex-wrap:wrap;align-content:center;gap:.4rem;height:100%;display:flex}.badge-pill{border:2px solid var(--accent);background:var(--surface-2);border-radius:999px;align-items:baseline;gap:.4rem;padding:.25rem .65rem;display:inline-flex}.badge-value{font-variant-numeric:tabular-nums;font-weight:700}.badge-label{color:var(--muted);font-size:.8rem}.widget-hidden{opacity:.45}.hidden-tag{background:var(--surface-2);color:var(--muted);border-radius:999px;margin-left:.4rem;padding:.05rem .4rem;font-size:.72rem;font-weight:500}.access-row{border-bottom:1px solid var(--border);align-items:center;gap:1rem;padding:.4rem 0}.access-row strong{min-width:140px}.widget-body{position:relative}.widget-filter-panel{z-index:5;background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;flex-wrap:wrap;align-items:flex-end;gap:.5rem;padding:.6rem;display:flex;position:absolute;top:0;left:.5rem;right:.5rem;box-shadow:0 6px 20px #00000040}.widget-filter-panel .field{flex:1;min-width:140px}.filter-on{color:var(--accent);font-weight:600}.dash-grid.editing .react-resizable-handle{z-index:3;width:18px;height:18px}.dash-grid.editing .react-grid-item>.react-resizable-handle:after{border-width:0 2px 2px 0;border-color:var(--accent);width:8px;height:8px}.group-body.drop-target{outline:2px dashed var(--accent);outline-offset:-4px;background:color-mix(in srgb, var(--accent) 8%, transparent);border-radius:10px}.react-grid-item.cssTransforms{transition-timing-function:ease-in-out}.widget-group>.widget-body{transition:opacity .2s ease-in-out}.widget-collapsed>.widget-body{opacity:0;pointer-events:none}@keyframes reveal{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.widget-group>.widget-body,.accordion-panel,.accordion-chevron,.accordion-panel-body{transition:none}}.accordion{flex-direction:column;gap:6px;height:100%;min-height:0;display:flex}.accordion-panel{border:1px solid var(--border);border-radius:10px;flex-direction:column;flex:0 38px;min-height:38px;transition:flex-grow .24s ease-in-out;display:flex;overflow:hidden}.accordion-panel.open{flex-grow:1;min-height:140px}.accordion-head{background:var(--surface-2);align-items:center;gap:.5rem;min-height:36px;padding-right:.4rem;display:flex}.accordion-toggle{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:.5rem;padding:.45rem .7rem;font-weight:600;display:flex}.accordion-chevron{color:var(--muted);transition:transform .24s ease-in-out;display:inline-block}.accordion-panel.open .accordion-chevron{transform:rotate(90deg)}.accordion-panel-body{opacity:0;flex:1;min-height:0;padding:.25rem .5rem .5rem;transition:opacity .2s ease-in-out;position:relative;overflow:hidden}.accordion-panel.open .accordion-panel-body{overflow:auto}.accordion-animating .accordion-panel .accordion-panel-body{overflow:hidden}.accordion-add{flex:none;align-self:flex-start}.accordion-panel.open .accordion-panel-body{opacity:1}.widget-body>.accordion{padding:.25rem}
