/* Platform Data Explorer. TableauOps light: one theme only, no dark mode. */
:root {
  color-scheme: light;
  --bg: #FBFBFA;
  --grid: #EEECE8;
  --card: #ffffff;
  --line: #E6E4DF;
  --ink: #141517;
  --muted: #5b6068;
  --orange: #F7962B;
  --orange-soft: #FEF1E2;
  --orange-ink: #9a5200;
  --head: "Helvetica Neue", Helvetica, Arial, "Liberation Sans", sans-serif;
  --body: "Poppins", "Segoe UI", system-ui, sans-serif;
  --mono: ui-monospace, "SF Mono", "Cascadia Mono", Consolas, "Roboto Mono", Menlo, monospace;
}
* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; }
body {
  background-color: var(--bg);
  background-image: linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);
  background-size: 80px 80px;
  color: var(--ink);
  font: 400 13px/1.5 var(--body);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
button { font: inherit; color: inherit; cursor: pointer; }
code, .mono { font-family: var(--mono); }

.shell { height: 100%; display: flex; flex-direction: column; gap: 10px; padding: 12px 14px 8px; min-width: 0; }

/* ---------------------------------------------------------------- header */
.top { display: flex; align-items: center; gap: 10px 12px; flex-wrap: wrap; min-width: 0; }
.brand { display: flex; flex-direction: column; line-height: 1.1; flex: none; }
.kicker { font: 600 10px/1 var(--body); letter-spacing: .14em; text-transform: uppercase; color: var(--orange-ink); margin-bottom: 4px; }
h1 { font: 700 20px/1.05 var(--head); letter-spacing: -.02em; margin: 0; }
.paths { display: flex; gap: 5px; flex: 1 1 0; min-width: 0; overflow-x: auto; padding: 2px 0; scrollbar-width: thin; }
.pbtn {
  flex: none; background: var(--card); border: 1px solid var(--line); border-radius: 999px; padding: 5px 10px 5px 6px;
  font: 500 11.5px/1.2 var(--body); white-space: nowrap; transition: background .15s, border-color .15s;
}
.pbtn:hover { border-color: #cfccc5; }
.pbtn .n { display: inline-block; width: 16px; height: 16px; border-radius: 50%; background: #f1efeb; color: var(--muted); font: 600 10px/16px var(--body); text-align: center; margin-right: 6px; }
.pbtn.on { background: var(--orange-soft); border-color: var(--orange); }
.pbtn.on .n { background: var(--orange); color: #fff; }
.search { position: relative; flex: 0 0 196px; }
.search input {
  width: 100%; height: 34px; border: 1px solid var(--line); border-radius: 10px; background: var(--card); padding: 0 9px;
  font: 400 11px var(--body); color: var(--ink); outline: none;
}
.search input:focus { border-color: var(--orange); box-shadow: 0 0 0 3px var(--orange-soft); }
.results {
  position: absolute; z-index: 20; top: 40px; right: 0; width: min(340px, calc(100vw - 28px)); max-height: 330px; overflow-y: auto;
  background: var(--card); border: 1px solid var(--line); border-radius: 14px; box-shadow: 0 12px 32px rgba(20, 21, 23, .12); padding: 6px;
}
.res { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; width: 100%; border: 0; background: none; text-align: left; padding: 7px 9px; border-radius: 9px; }
.res:hover, .res.act { background: var(--orange-soft); }
.res b { font: 600 12px var(--mono); overflow-wrap: anywhere; }
.res span { font-size: 11px; color: var(--muted); text-align: right; flex: none; max-width: 55%; overflow-wrap: anywhere; }
.res-empty { padding: 10px; color: var(--muted); font-size: 12px; }

/* ---------------------------------------------------------------- body */
.body { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 12px; }
.map { position: relative; min-height: 0; min-width: 0; border-radius: 16px; overflow: hidden; touch-action: none; }
#svg { display: block; width: 100%; height: 100%; cursor: grab; user-select: none; -webkit-user-select: none; }
#svg.drag { cursor: grabbing; }
.zoom { position: absolute; bottom: 8px; right: 8px; display: flex; gap: 4px; }
.zoom button { height: 28px; min-width: 28px; padding: 0 9px; background: var(--card); border: 1px solid var(--line); border-radius: 8px; font: 500 12px/1 var(--body); }
.zoom button:hover { border-color: #cfccc5; }

/* svg pieces */
.zone rect { fill: #fff; stroke: var(--line); }
.zone text { font: 700 10.5px var(--head); letter-spacing: .12em; text-transform: uppercase; }
.zone .znote { font: 400 11px var(--body); letter-spacing: 0; text-transform: none; fill: var(--muted); }
.node { cursor: pointer; transition: opacity .2s; }
.node .bg { fill: #fff; }
.node .frame { fill: none; stroke: #d9d6cf; stroke-width: 1; }
.node text { font: 600 13px var(--mono); fill: var(--ink); }
.node .luid { font: 600 8.5px var(--body); fill: var(--muted); letter-spacing: .06em; }
.node:hover .frame { stroke: #9aa0a8; }
.node.ev .bg { fill: #f6f5f2; }
.node.ev text { font-weight: 500; font-size: 12px; }
.node.tenant { cursor: default; }
.node.tenant text { fill: var(--muted); font-weight: 400; font-size: 11.5px; }
.node.tenant .frame { stroke-dasharray: 3 3; }
.edge { transition: opacity .2s; }
.edge .line { fill: none; stroke: #8b9099; stroke-width: 1.3; }
.edge .arrow { fill: #8b9099; }
.edge.inf .line { stroke-dasharray: 6 4; }
.edge.evl .line { stroke: #d6d8dc; stroke-width: 1; }
.edge.evl .arrow { fill: #d6d8dc; }
.edge .hit { fill: none; stroke: transparent; stroke-width: 14; cursor: pointer; pointer-events: stroke; }
.edge.hov .line { stroke: var(--ink); stroke-width: 2; }
.edge.hov .arrow { fill: var(--ink); }
.label { pointer-events: none; display: none; }
.label.show { display: block; }
.label rect { fill: #fff; stroke: var(--line); }
.label text { font: 500 11px var(--mono); fill: var(--ink); }
.label.cur rect { fill: var(--orange-soft); stroke: var(--orange); }

.focus .node { opacity: .25; }
.focus .node.on { opacity: 1; }
.focus .node.cur .frame { stroke: var(--orange); stroke-width: 2.4; }
.focus .node.cur .bg { fill: var(--orange-soft); }
.focus .edge { opacity: .22; }
.focus .edge.evl { opacity: .12; }
.focus .edge.on { opacity: .6; }
.focus .edge.on .line { stroke: var(--orange); stroke-width: 2; }
.focus .edge.on .arrow { fill: var(--orange); }
.focus .edge.cur { opacity: 1; }
.focus .edge.cur .line { stroke-width: 2.6; }

/* ---------------------------------------------------------------- panel */
.panel { min-height: 0; overflow-y: auto; background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 16px; scrollbar-width: thin; }
.panel h2 { font: 700 17px/1.2 var(--head); letter-spacing: -.01em; margin: 0 0 6px; overflow-wrap: anywhere; }
.panel h2.mono { font: 700 15.5px/1.25 var(--mono); letter-spacing: 0; }
.panel h3 { font: 600 10.5px var(--body); letter-spacing: .1em; text-transform: uppercase; color: var(--muted); margin: 16px 0 6px; }
.panel p { margin: 0 0 8px; color: var(--muted); }
.panel p.lead { color: var(--ink); }
.ztag { display: inline-flex; align-items: center; gap: 6px; font: 600 10.5px var(--body); letter-spacing: .08em; text-transform: uppercase; margin-bottom: 8px; }
.ztag i { width: 8px; height: 8px; border-radius: 2px; display: inline-block; }
.close { float: right; border: 1px solid var(--line); background: #fff; border-radius: 8px; height: 24px; padding: 0 8px; font-size: 11px; color: var(--muted); }
.chips { display: flex; flex-wrap: wrap; gap: 5px; }
.chip { font: 500 11.5px var(--mono); background: #f6f5f2; border: 1px solid var(--line); border-radius: 6px; padding: 2px 7px; }
.tbtn { font: 600 11.5px var(--mono); background: #fff; border: 1px solid var(--line); border-left-width: 3px; border-radius: 6px; padding: 2px 7px; overflow-wrap: anywhere; text-align: left; }
.tbtn:hover { background: var(--orange-soft); border-color: var(--orange); }
.tbtn.ev { border-left-width: 1px; background: #f6f5f2; font-weight: 500; }
.join { border: 1px solid var(--line); border-radius: 12px; padding: 9px 10px; margin-bottom: 7px; }
.join .head { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; margin-bottom: 6px; }
.join .col { font: 600 12px var(--mono); overflow-wrap: anywhere; }
.join .arrow { color: var(--muted); }
.join .by { font-size: 11px; color: var(--muted); }
.join .note { font-size: 11px; color: var(--muted); margin: 5px 0 0; }
.badge { font: 600 10px var(--body); color: var(--orange-ink); background: var(--orange-soft); border: 1px dashed var(--orange); border-radius: 999px; padding: 1px 7px; }
.sql { display: flow-root; background: #f8f7f4; border-radius: 8px; padding: 6px 6px 6px 8px; margin-top: 5px; }
.sql code { display: block; font-size: 10.8px; line-height: 1.5; white-space: pre-wrap; overflow-wrap: anywhere; color: var(--ink); }
.copy { float: right; margin: 0 0 2px 6px; border: 1px solid var(--line); background: #fff; border-radius: 6px; font: 500 10.5px var(--body); padding: 2px 7px; color: var(--muted); }
.copy:hover { color: var(--ink); border-color: #cfccc5; }
.copy.done { color: #1f7a4d; border-color: #b9dfc9; }
.none { font-size: 12px; color: var(--muted); }
.stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 10px 0 4px; }
.stats div { border: 1px solid var(--line); border-radius: 12px; padding: 8px 8px 6px; }
.stats b { display: block; font: 700 20px/1 var(--head); }
.stats span { font-size: 10.5px; color: var(--muted); }
.how { margin: 0; padding-left: 18px; color: var(--muted); }
.how li { margin-bottom: 4px; }

.steps { list-style: none; margin: 10px 0; padding: 0; }
.step { display: flex; gap: 9px; padding: 8px; border-radius: 12px; border: 1px solid transparent; cursor: pointer; color: var(--muted); }
.step .n { flex: none; width: 20px; height: 20px; border-radius: 50%; background: #f1efeb; font: 600 11px/20px var(--body); text-align: center; }
.step.done .n { background: var(--orange-soft); color: var(--orange-ink); }
.step.cur { background: var(--orange-soft); border-color: var(--orange); color: var(--ink); cursor: default; }
.step.cur .n { background: var(--orange); color: #fff; }
.step .txt { min-width: 0; flex: 1; }
.step .sql { background: #fff; }
.nav { display: flex; align-items: center; gap: 8px; }
.nav button { height: 30px; padding: 0 14px; border-radius: 9px; border: 1px solid var(--line); background: #fff; font: 500 12px var(--body); }
.nav button.primary { background: var(--ink); color: #fff; border-color: var(--ink); }
.nav button:disabled { opacity: .4; cursor: default; }
.nav span { font-size: 11.5px; color: var(--muted); margin-left: auto; }

/* ---------------------------------------------------------------- footer */
.foot { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 18px; font-size: 10.5px; color: var(--muted); min-width: 0; }
.legend { display: flex; flex-wrap: wrap; gap: 3px 14px; }
.legend span { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.source { margin: 0; flex: 1 1 320px; min-width: 0; }
.error { margin: 40px auto; max-width: 420px; background: #fff; border: 1px solid var(--line); border-radius: 16px; padding: 18px; }

/* ---------------------------------------------------------------- narrow */
@media (max-width: 860px) {
  html, body { height: auto; }
  .shell { height: auto; min-height: 100%; }
  .body { display: block; }
  .map { height: 62vh; min-height: 340px; max-height: 560px; border: 1px solid var(--line); margin-bottom: 10px; }
  .panel { overflow: visible; }
  .search { flex: 1 1 100%; order: 2; }
  .paths { flex: 1 1 100%; order: 3; }
}
