/* Cube feature styles. CSP-compliant (external, no inline) AND scoped under
   .cube-root so they never leak into the SCIKIQ chrome (sidebar/header).
   The viewer mirrors the standalone HFM-utility SmartView look, embedded in
   the SCIKIQ content area. */
:root{
  --cube-bg:#f6f7f9;--cube-panel:#fff;--cube-ink:#1f2733;--cube-muted:#8a93a2;
  --cube-line:#e8eaed;--cube-line2:#eef0f3;--cube-accent:#2f6df6;--cube-accent-soft:#eaf1fe;
  --cube-pos:#0f9d58;--cube-neg:#d23f3f;--cube-grp:#f3f6fb;--cube-chip:#eef2f7;
  --cube-shadow:0 1px 2px rgba(16,24,40,.04),0 1px 3px rgba(16,24,40,.06);
}
/* .cube-root{color:var(--cube-ink);font:13px/1.45 "Inter","Segoe UI",Roboto,Arial,sans-serif;-webkit-font-smoothing:antialiased} */
.cube-root *{box-sizing:border-box}
/* .cube-root button{font:inherit;cursor:pointer;border:1px solid var(--cube-line);background:#fff;border-radius:8px;padding:7px 12px;color:var(--cube-ink);display:inline-flex;align-items:center;gap:6px}
.cube-root button:hover{background:#f4f6f9}
.cube-root button.primary{background:var(--cube-accent);border-color:var(--cube-accent);color:#fff}
.cube-root button.primary:hover{background:#2861e0} */
.cube-root button.ghost{border-color:transparent;background:transparent}
.cube-root button.ghost:hover{background:#eef1f5}
.cube-root input,.cube-root select,.cube-root textarea{font:inherit;color:var(--cube-ink)}
/* .cube-root a{color:var(--cube-accent);text-decoration:none} */

/* ---- utility (used by modals) ---- */
.cube-root .muted{color:var(--cube-muted);font-size:12px}
.cube-root .err{color:var(--cube-neg);font-size:12px;margin-top:6px;white-space:pre-wrap}
.cube-root .mt10{margin-top:10px}

/* ---- viewer shell (fits inside SCIKIQ content area) ---- */
.cube-root .app{display:grid;grid-template-rows:auto 1fr auto;height:calc(100vh - 64px);min-height:480px}

/* top bar */
.cube-root .topbar{display:flex;align-items:center;gap:16px;padding:10px 16px;background:var(--cube-panel);position:relative;z-index:5}
.cube-root .brand{display:flex;align-items:center;gap:10px}
.cube-root .logo{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,#2f6df6,#1b4fd0);display:flex;align-items:center;justify-content:center;color:#fff;font-size:17px}
.cube-root .brand .t1{font-weight:700;font-size:15px;line-height:1.1}
.cube-root .brand .t2{font-size:11.5px;color:var(--cube-muted)}
.cube-root .cubesel{border:none;background:none;color:var(--cube-muted);padding:0;cursor:pointer;max-width:240px}
.cube-root .cubesel:focus {outline:none;}
.cube-root .tabs{display:flex;align-items:center;gap:2px;overflow:auto;max-width:42vw}
.cube-root .tab{padding:7px 12px;border-radius:8px;color:var(--cube-muted);white-space:nowrap;cursor:pointer;font-weight:500}
.cube-root .tab:hover{background:#f1f4f8;color:var(--cube-ink)}
.cube-root .tab.active{background:var(--cube-accent-soft);color:var(--cube-accent);font-weight:600}
.cube-root .tab .x,.cube-root .tab .ed{margin-left:6px;opacity:.5}
.cube-root .tab .x:hover,.cube-root .tab .ed:hover{opacity:1}
.cube-root .spacer{flex:1}
.cube-root .search{position:relative}
.cube-root .search input{width:240px;padding:8px 12px 8px 32px;border:1px solid var(--cube-line);border-radius:9px;background:#fbfcfd}
.cube-root .search input:focus{outline:none;border-color:var(--cube-accent);background:#fff}
.cube-root .search .ic{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--cube-muted)}
.cube-root .actions{display:flex;gap:8px;align-items:center}

/* body */
.cube-root .body{display:grid;grid-template-columns:240px 1fr;min-height:0}
.cube-root .sidebar{background:var(--cube-panel);padding:14px}
.cube-root .side-h{font-size:12px;font-weight:700;letter-spacing:.2px}
.cube-root .side-sub{font-size:11px;color:var(--cube-muted);margin-bottom:12px}
.cube-root .zone{margin-bottom:14px}
.cube-root .zone-h{display:flex;justify-content:space-between;align-items:baseline;margin:0 2px 6px}
.cube-root .zone-h b{font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:#4b5563}
.cube-root .zone-h span{font-size:10.5px;color:var(--cube-muted)}
.cube-root .dropzone{min-height:38px;border:1.5px dashed transparent;border-radius:10px;padding:4px;display:flex;flex-direction:column;gap:6px;}
.cube-root .dropzone.over{border-color:var(--cube-accent);background:var(--cube-accent-soft)}
/* flex-direction:row is required — Bootstrap's global .card forces column. */
.cube-root .card{flex-direction:row;align-items:center;padding:7px 10px;cursor: grab;}
.cube-root .card:hover{border-color:#cfd5dc;box-shadow:0 1px 3px rgba(16,24,40,.10)}
.cube-root .card .nm{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cube-root .card .sel{margin-left:auto;flex:none;font-size:11px;color:var(--cube-accent);background:var(--cube-accent-soft);padding:2px 9px;border-radius:20px;white-space:nowrap;cursor:pointer}
.cube-root .card .sel:hover{background:#dce8fe}
.cube-root .card .dot{color:var(--cube-muted);flex:none}
.cube-root .card.dragging{opacity:.4}
.cube-root .display{margin-top:8px;padding-top:12px}
.cube-root .display .dh{font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:#4b5563;margin-bottom:8px}
.cube-root .toggle{display:flex;align-items:center;gap:8px;padding:6px 2px;color:#374151;cursor:pointer}
.cube-root .toggle .sw{margin-left:auto;width:34px;height:18px;border-radius:20px;background:#cdd3db;position:relative;transition:.15s;flex:none}
.cube-root .toggle .sw::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:.15s}
.cube-root .toggle.on .sw{background:var(--cube-accent)}
.cube-root .toggle.on .sw::after{left:18px}
.cube-root .toggle.yearrow{margin-top:6px;cursor:default}
.cube-root .yearsel{margin-left:auto;border:1px solid var(--cube-line);border-radius:7px;padding:3px 6px}

/* grid */
.cube-root .grid-area{overflow:auto;position:relative;}
.cube-root table.pivot{border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums;width:max-content;min-width:100%}
.cube-root .pivot th,.cube-root .pivot td{border-bottom:1px solid var(--cube-line2);border-right:1px solid var(--cube-line2);padding:7px 14px;white-space:nowrap;background:#fff}
.cube-root .pivot thead th{position:sticky;top:0;z-index:3;background:#fff;color:#5b6573;font-weight:600;text-align:center;border-bottom:1px solid var(--cube-line)}
.cube-root .pivot thead th.lvl0{color:#1f2733;font-weight:700}
.cube-root .pivot thead th.corner{left:0;z-index:5;text-align:left;color:#5b6573;font-size:11px;text-transform:uppercase;letter-spacing:.4px;vertical-align:bottom}
.cube-root .pivot tbody th.rowhdr{position:sticky;left:0;z-index:2;background:#fff;text-align:left;font-weight:500;border-right:1px solid var(--cube-line)}
.cube-root .pivot td{text-align:right;color:#222b36}
.cube-root .pivot td.empty{color:#c7ccd3}
.cube-root .pivot td.neg{color:var(--cube-neg)}
.cube-root .pivot tbody tr:hover td,.cube-root .pivot tbody tr:hover th.rowhdr{background:#fcfdff}
.cube-root tr.group th.rowhdr{font-weight:700;background:var(--cube-grp)}
/* .cube-root tr.group td{background:var(--cube-grp)} */
.cube-root .caret{display:inline-block;width:14px;color:var(--cube-muted);cursor:pointer;user-select:none}
.cube-root .caret.caret-blank{cursor:default}
.cube-root .scale-note{display:block;margin-top:2px;font-size:9.5px;font-weight:400;color:var(--cube-muted);text-transform:none;letter-spacing:0}
.cube-root .gtag{font-size:9.5px;color:var(--cube-muted);background:#e9edf3;padding:1px 6px;border-radius:5px;margin-left:8px;text-transform:lowercase}
.cube-root .rowname{cursor:default}
.cube-root .rpad{display:inline-flex;align-items:center}

/* footer */
.cube-root .statusbar{display:flex;align-items:center;gap:14px;padding:7px 16px;color:var(--cube-muted);font-size:12px}
.cube-root .live{display:inline-flex;align-items:center;gap:5px}
.cube-root .live::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--cube-pos)}

/* loader — overlay uses platform #loader + loader.gif */
.cube-root .empty-msg{padding:40px;color:var(--cube-muted);max-width:560px}

/* ---- drill-through: data cells are double-clickable to view source rows ---- */
.cube-root #grid td.drillable{cursor:pointer}
.cube-root #grid td.drillable:hover{outline:2px solid var(--cube-accent);outline-offset:-2px}
.cube-drill-body{max-height:70vh;overflow:auto}
.cube-drill-body table{white-space:nowrap}

/* ---- modal (cmodal* avoids Bootstrap .modal collision) ---- */
.cube-root .cmodal-bg{position:fixed;inset:0;background:rgba(17,24,39,.42);display:none;align-items:center;justify-content:center;z-index:20000}
.cube-root .cmodal-bg.on{display:flex}
.cube-root .cmodal{position:relative;background:#fff;border-radius:14px;width:480px;max-width:94vw;max-height:84vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 50px rgba(16,24,40,.25)}
.cube-root .cmodal-wide{width:640px}
.cube-root .cmodal-narrow{width:420px}
.cube-root .cmodal .mh{padding:14px 16px;font-weight:700;border-bottom:1px solid var(--cube-line);display:flex;align-items:center;justify-content:space-between}
.cube-root .cmodal .mb{padding:12px 16px;overflow:auto}
.cube-root .cmodal .mf{padding:12px 16px;border-top:1px solid var(--cube-line);display:flex;gap:8px;justify-content:flex-end}
.cube-root .fld{margin-bottom:10px}
.cube-root .fld label{display:block;font-weight:600;margin-bottom:4px}
.cube-root .fld input,.cube-root .fld textarea{width:100%;padding:8px 10px;border:1px solid var(--cube-line);border-radius:8px}
.cube-root .srch{width:100%;padding:9px 12px;border:1px solid var(--cube-line);border-radius:9px;margin-bottom:8px}
.cube-root .qa{display:flex;gap:14px;margin-bottom:6px}
.cube-root .qa a{font-size:12px;cursor:pointer}
.cube-root .selinfo{font-size:11px;color:var(--cube-muted);margin-bottom:6px}
.cube-root .tree{list-style:none;margin:0;padding:0}
.cube-root .tree li{padding:1px 0}
.cube-root .node{display:flex;align-items:center;gap:7px;padding:4px 6px;border-radius:7px}
.cube-root .node:hover{background:#f3f6fb}
.cube-root .node .tw{width:14px;text-align:center;color:var(--cube-muted);cursor:pointer}
.cube-root .node .lb{cursor:pointer}
.cube-root .tree ul{list-style:none;margin:0;padding-left:18px}

/* ---- member picker tree (scoped outside .cube-root via .cube-picker-body) ---- */
.cube-picker-body .tree{list-style:none;margin:0;padding:0;}
.cube-picker-body .tree li{padding:1px 0}
.cube-picker-body .tree ul{list-style:none;margin:0;padding-left:18px}
.cube-picker-body .node{display:flex;align-items:center;gap:7px;padding:4px 6px;border-radius:7px}
.cube-picker-body .node:hover{background:#f3f6fb}
.cube-picker-body .node .tw{width:14px;text-align:center;color:var(--cube-muted);cursor:pointer;flex:none}
.cube-picker-body .node .lb{cursor:pointer}
/* search results: hits keep their branch, ancestors are drawn as context */
.cube-picker-body .node.node-ctx .lb{color:var(--cube-muted)}
.cube-picker-body .pick-hit{background:#fff2b8;color:inherit;padding:0 1px;border-radius:2px}
.cube-picker-body .pick-empty{color:var(--cube-muted);font-size:12px;padding:8px 6px;list-style:none}

/* ---- member picker: the search stays put while the tree scrolls ---- */
/* .cube-picker-body is the scroll container (overflow-y:auto, max-height), so a
   search box that is merely its first child scrolls out of reach -- precisely
   when a long tree is the reason you reached for it.
   The negative margins pull the header out to the scroller's own 1rem padding
   edge so tree rows pass *underneath* it rather than beside it, and the padding
   puts the inset back around the input. Opaque background, or the tree shows
   through it.
   top is -1rem, not 0: a sticky offset is measured from the scrollport's
   *padding* box, so top:0 would park the header 1rem below the body's edge and
   leave a strip of tree scrolling past above it. */
.cube-picker-body .cube-picker-head{
  position:sticky;top:-1rem;z-index:3;
  margin:-1rem -1rem .5rem;padding:1rem 1rem .5rem;
  background:var(--cube-panel,#fff);
}

/* ---- "Copy with children": flattened member codes, for pasting into a query ---- */
.cube-picker-body .cube-desc-out textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;word-break:break-all}

/* ---- storage picker overlay (d-none toggled; no Bootstrap Modal JS) ---- */
.cube-picker-wrap{
  position:fixed;
  inset:0;
  background:rgba(17,24,39,.42);
  /* display:flex; */
  /* align-items:center; */
  /* justify-content:center; */
  z-index:1060}

/* ---- storage picker folder browser ---- */
/* .cube-picker-body .fb-lbl{font-weight:600;display:block;margin-bottom:4px} */
.cube-picker-body #stBucket{width:100%}
.cube-picker-body .fb-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin:10px 0;font-size:12px}
.cube-picker-body .fb-crumbs a{cursor:pointer}
.cube-picker-body .fb-crumbs .sep{color:var(--cube-muted)}
.cube-picker-body .fb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(108px,1fr));gap:8px;max-height:320px;overflow:auto;border:1px solid var(--cube-line);border-radius:8px;padding:10px;background:#fafbfc}
.cube-picker-body .fb-item{display:flex;flex-direction:column;align-items:center;gap:5px;padding:9px 4px;border:1px solid transparent;border-radius:8px;cursor:pointer;text-align:center;font-size:11px;word-break:break-word}
.cube-picker-body .fb-item:hover{background:#fff;border-color:var(--cube-line)}
.cube-picker-body .fb-item.sel{background:var(--cube-accent-soft);border-color:var(--cube-accent)}
.cube-picker-body .fb-ic{font-size:26px;line-height:1}
.cube-picker-body .fb-empty{grid-column:1/-1;color:var(--cube-muted);text-align:center;padding:22px}

/* manager progress bar (rendered in native SCIKIQ table, outside .cube-root) */
.cube-prog{height:6px;margin-top:4px}

 .cube-dt {
    max-height:calc(100dvh - 430px);
 }
/* ---- dataset mode switch (Pivot / Source Data / Archived Data) ---- */
.cube-root .modes{display:inline-flex;gap:2px;padding:3px;background:var(--cube-chip);border-radius:9px;flex:none}
.cube-root .modes .mode{border:none;background:transparent;border-radius:7px;padding:5px 11px;font-size:12px;font-weight:600;color:var(--cube-muted);white-space:nowrap}
.cube-root .modes .mode:hover{color:var(--cube-ink)}
.cube-root .modes .mode.on{background:var(--cube-panel);color:var(--cube-accent);box-shadow:var(--cube-shadow)}

/* ---- raw-row data view (source / archived) ---- */
.cube-root #dataView{height:100%}
.cube-root .data-note{padding:8px 14px;border-bottom:1px solid var(--cube-line2);color:var(--cube-muted);font-size:11.5px;display:flex;gap:14px;align-items:center;flex-wrap:wrap;background:#fbfcfd}
.cube-root .data-note b{color:var(--cube-ink);font-weight:600}
.cube-root .data-note .warn{color:#a1651a;background:#fdf3e3;padding:2px 8px;border-radius:6px}
.cube-root .data-note code{background:var(--cube-chip);padding:1px 6px;border-radius:5px;color:#4b5563;word-break:break-all}
.cube-root #dataView table td.num{text-align:right;font-variant-numeric:tabular-nums}
.cube-root #dataView table thead th{position:sticky;top:0;z-index:2;background:#fff}
.cube-root .pager{display:inline-flex;gap:6px;align-items:center}
.cube-root .pager button:disabled{opacity:.45;cursor:not-allowed}
.cube-root .card.nodrag{cursor:pointer}
