/* figures: jsonview (features/json_view.md; SVGs from scripts/figures/json_view_layout.py, stepper in js/fig-jsonview.js) */

/* one colour per concept, the same in every figure: structure (object/array, views) blue, keys navy, strings green,
   numbers orange, decoded strings purple, owned edit storage teal, dangling/invalid red */
.nj-jsonview, .nj-jsonview-cmp {
    --jv-struct: var(--nj-blue);
    --jv-key: var(--nj-hl-key);
    --jv-str: var(--nj-hl-string);
    --jv-num: var(--nj-hl-number);
    --jv-dec: var(--nj-hl-function);
    --jv-own: var(--nj-hl-type);
    --jv-bad: var(--nj-red);
    --jv-line: color-mix(in srgb, currentColor 55%, var(--md-default-bg-color));
}
.md-typeset svg.nj-jsonview { min-width: 34rem; max-width: 42rem; }
.nj-jsonview .nj-jsonview-c-struct { --c: var(--jv-struct); }
.nj-jsonview .nj-jsonview-c-key { --c: var(--jv-key); }
.nj-jsonview .nj-jsonview-c-str { --c: var(--jv-str); }
.nj-jsonview .nj-jsonview-c-num { --c: var(--jv-num); }
.nj-jsonview .nj-jsonview-c-dec { --c: var(--jv-dec); }
.nj-jsonview .nj-jsonview-c-own { --c: var(--jv-own); }
.nj-jsonview .nj-jsonview-c-bad { --c: var(--jv-bad); }
.nj-jsonview .nj-jsonview-c-line { --c: var(--jv-line); }

.nj-jsonview text { fill: currentColor; font-size: 13px; }
.nj-jsonview text[class*="nj-jsonview-c-"] { fill: var(--c); }
.nj-jsonview .nj-jsonview-h { font-size: 15px; font-weight: 600; fill-opacity: .85; }
.nj-jsonview .nj-jsonview-sm2 { font-size: 14px; }
.nj-jsonview .nj-jsonview-note { font-size: 13px; fill-opacity: .75; }
.nj-jsonview .nj-jsonview-strong { font-weight: 600; fill-opacity: 1; }
.nj-jsonview .nj-jsonview-tiny { font-size: 10.5px; fill-opacity: .7; }
.nj-jsonview .nj-jsonview-mono { font-family: var(--md-code-font-family), monospace; font-size: 13px; }
.nj-jsonview .nj-jsonview-sm { font-size: 12px; }
.nj-jsonview .nj-jsonview-xs { font-size: 11px; }
.nj-jsonview .nj-jsonview-muted { fill-opacity: .75; }
.nj-jsonview .nj-jsonview-byte { font-size: 12px; }
.nj-jsonview .nj-jsonview-kind { font-size: 12.5px; font-weight: 700; }

.nj-jsonview .nj-jsonview-box { fill: var(--md-default-bg-color); stroke: var(--jv-line); stroke-width: 1.5; }
.nj-jsonview .nj-jsonview-heap { fill: color-mix(in srgb, currentColor 7%, var(--md-default-bg-color)); stroke: var(--jv-line); stroke-width: 1.5; stroke-dasharray: 5 3; }
.nj-jsonview .nj-jsonview-ribbon { fill: color-mix(in srgb, currentColor 4%, var(--md-default-bg-color)); stroke: var(--jv-line); stroke-width: 1.2; }
.nj-jsonview .nj-jsonview-span { fill: color-mix(in srgb, var(--c) 18%, var(--md-default-bg-color)); }
.nj-jsonview .nj-jsonview-frame { fill: none; stroke: var(--jv-line); stroke-width: 1.2; stroke-dasharray: 6 4; }
.nj-jsonview .nj-jsonview-store { fill: color-mix(in srgb, var(--jv-own) 6%, var(--md-default-bg-color)); stroke: color-mix(in srgb, var(--jv-own) 55%, var(--md-default-bg-color)); stroke-width: 1.2; stroke-dasharray: 6 4; }
.nj-jsonview .nj-jsonview-node { fill: color-mix(in srgb, var(--c) 12%, var(--md-default-bg-color)); stroke: var(--c); stroke-width: 1.5; }
.nj-jsonview .nj-jsonview-node.nj-jsonview-hot { stroke-width: 3; }
.nj-jsonview .nj-jsonview-node.nj-jsonview-gap { fill: var(--md-default-bg-color); stroke: var(--jv-bad); stroke-dasharray: 4 3; }
.nj-jsonview .nj-jsonview-node.nj-jsonview-free { fill: none; stroke-dasharray: 3 3; }
.nj-jsonview .nj-jsonview-sep { stroke: var(--jv-line); stroke-width: 1; fill: none; }
.nj-jsonview .nj-jsonview-arr { stroke: var(--c); stroke-width: 1.5; fill: none; }
.nj-jsonview .nj-jsonview-dash { stroke-dasharray: 4 3; }
.nj-jsonview .nj-jsonview-head { fill: var(--c); }
.nj-jsonview .nj-jsonview-bar { fill: color-mix(in srgb, var(--jv-struct) 30%, var(--md-default-bg-color)); stroke: var(--jv-struct); stroke-width: 1.2; }
.nj-jsonview .nj-jsonview-bad {
    fill: color-mix(in srgb, var(--jv-bad) 20%, var(--md-default-bg-color));
    stroke: var(--jv-bad); stroke-width: 1.2; stroke-dasharray: 4 2;
}
.nj-jsonview .nj-jsonview-evt { stroke: var(--jv-bad); stroke-width: 2; fill: none; }
.nj-jsonview .nj-jsonview-evt--ok { stroke: var(--jv-struct); stroke-dasharray: 4 3; }
.nj-jsonview .nj-jsonview-onbad, .nj-jsonview .nj-jsonview-onok { font-size: 11.5px; fill-opacity: 1; }

/* the edit stepper: without JS all frames are shown one below the other */
.nj-jsonview-steps { margin: 1.5rem 0; }
.md-typeset .nj-jsonview-step { display: block; width: 100%; max-width: none; margin: 0 0 1.5rem; }
.nj-jsonview-step > figcaption {
    margin: .25rem 0 0; font-size: .75rem; color: var(--md-default-fg-color--light); text-align: left;
    max-width: none;
}
.nj-jsonview-step > figcaption code { font-size: .95em; }
.nj-jsonview-step .nj-jsonview-scroll { overflow-x: auto; }
.md-typeset .nj-jsonview-steps.is-enhanced .nj-jsonview-step { display: none; margin: 0; }
.md-typeset .nj-jsonview-steps.is-enhanced .nj-jsonview-step.is-current { display: block; }
.nj-jsonview-controls { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; margin: 0 0 .6rem; }
.nj-jsonview-controls button {
    min-height: 2.2rem; min-width: 2.2rem; padding: 0 .8rem;
    font: inherit; font-size: .7rem; font-weight: 600; cursor: pointer;
    color: var(--md-typeset-a-color); background: var(--md-default-bg-color);
    border: 1.5px solid var(--md-typeset-a-color); border-radius: .4rem;
}
.nj-jsonview-controls button:hover:not(:disabled) { background: color-mix(in srgb, var(--md-typeset-a-color) 10%, var(--md-default-bg-color)); }
.nj-jsonview-controls button:focus-visible { outline: 2px solid var(--md-accent-fg-color); outline-offset: 2px; }
.nj-jsonview-controls button:disabled { opacity: .45; cursor: default; }
.nj-jsonview-controls button[aria-current="step"], .nj-jsonview-controls button[aria-current="step"]:hover { color: var(--md-default-bg-color); background: var(--md-typeset-a-color); }
.nj-jsonview-controls .nj-jsonview-status { font-size: .7rem; color: var(--md-default-fg-color--light); margin-left: .25rem; }
@media (max-width: 44.9375em) {
    .nj-jsonview-controls button { min-height: 44px; min-width: 44px; }
}
@media (prefers-reduced-motion: no-preference) {
    .nj-jsonview-steps.is-enhanced .nj-jsonview-step.is-current { animation: nj-jsonview-fade .25s ease-out; }
}
@keyframes nj-jsonview-fade { from { opacity: .3; } to { opacity: 1; } }

/* json vs ordered_json vs editable document */
.nj-jsonview-cmp { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .6rem; margin: 1.2rem 0; }
.nj-jsonview-cmp > div {
    border: 1px solid var(--md-default-fg-color--lightest); border-radius: .4rem; padding: .5rem .6rem .6rem;
    background: var(--md-code-bg-color); min-width: 0;
}
.nj-jsonview-cmp > div.nj-jsonview-cmp--best { border-color: var(--jv-struct); }
.nj-jsonview-cmp .nj-jsonview-cmp-h { font-size: .7rem; font-weight: 600; margin: 0 0 .1rem; }
.nj-jsonview-cmp .nj-jsonview-cmp-v { font-size: .64rem; color: var(--md-default-fg-color--light); margin: 0 0 .4rem; }
.md-typeset .nj-jsonview-cmp pre { margin: 0; font-family: var(--md-code-font-family), monospace; font-size: .68rem; line-height: 1.5; white-space: pre; overflow-x: auto; background: none; color: var(--md-code-fg-color); }
.nj-jsonview-cmp .nj-jsonview-bad { color: var(--jv-bad); font-weight: 600; text-decoration: underline wavy; text-underline-offset: 3px; }
.nj-jsonview-cmp .nj-jsonview-ok { color: var(--jv-own); font-weight: 600; }
@media (max-width: 44.9375em) {
    .nj-jsonview-cmp { grid-template-columns: minmax(0, 1fr); }
}
