/* Visualization lab (uses the site's theme tokens, so light and dark both work) */
.vz { padding-top: 22px; padding-bottom: 60px; }
.vz .crumbs { font-size: 13px; color: var(--muted); margin-bottom: 14px; } .vz .crumbs a:hover { color: var(--ink); }
.vz-hero h1, .vz-panel h1 { font-size: clamp(26px, 4vw, 38px); margin: 6px 0 10px; } .vz-hero p { max-width: 70ch; }
.vz-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 18px; margin: 22px 0; }
.vz-card { display: block; border: 1px solid var(--line); border-radius: var(--r); background: var(--panel); padding: 20px; box-shadow: var(--shadow); transition: border-color .15s, transform .15s; }
.vz-card:hover { border-color: var(--accent); transform: translateY(-2px); } .vz-card h2 { margin: 6px 0 8px; font-size: 21px; } .vz-ico { font-size: 30px; }
.vz-credit { margin-top: 26px; font-size: 13px; color: var(--muted); max-width: 90ch; } .vz-credit a { color: var(--link); text-decoration: underline; }
.vz-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.vz-tab { border: 1px solid var(--line-strong); background: var(--panel); border-radius: 999px; padding: 6px 14px; font-size: 14px; } .vz-tab.on { background: var(--ink); color: var(--bg); border-color: var(--ink); }
.vz-panel { border: 1px solid var(--line); border-radius: var(--r); background: var(--panel); padding: 20px; min-width: 0; }
.vz-controls { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px 24px; margin: 14px 0; }
.vz-controls label span { display: block; font-size: 13px; color: var(--muted); margin-bottom: 2px; } .vz-controls b { color: var(--ink); } .vz-controls input { width: 100%; accent-color: var(--accent); }
.vz-chart { color: var(--text); min-height: 120px; overflow-x: auto; } .vz-chart svg { max-width: 100%; height: auto; } .vz-chart figure { margin: 0; } .vz-chart > div > svg + svg { margin-top: 10px; }
.vz-readout { font-family: var(--mono); font-size: 13px; background: var(--code-bg); border-radius: 10px; padding: 10px 14px; margin: 10px 0; overflow-wrap: anywhere; }
.vz-notice { background: var(--warn-soft); border-radius: 10px; padding: 10px 14px; }
.vz-muted { color: var(--muted); } .vz-err { color: var(--bad); background: var(--bad-soft); border-radius: 10px; padding: 10px 14px; overflow-wrap: anywhere; }
.vz-diagram { overflow-x: auto; background: var(--bg-soft); border-radius: 12px; padding: 16px; min-height: 140px; text-align: center; } .vz-diagram svg { max-width: 100%; height: auto; }
.vz-h2 { font-size: 18px; margin: 22px 0 4px; }
.vz-src { width: 100%; font-family: var(--mono); font-size: 13px; line-height: 1.5; background: var(--code-bg); color: var(--ink); border: 1px solid var(--line); border-radius: 10px; padding: 12px; resize: vertical; tab-size: 2; }
.vz-actions { display: flex; gap: 8px; margin-top: 10px; }
.vz-try { max-width: 90ch; padding-left: 20px; } .vz-try li { margin-bottom: 6px; }
.vz-frame { border: 1px solid var(--line); border-radius: var(--r); overflow: hidden; background: #fff; } .vz-frame iframe { display: block; width: 100%; height: 860px; border: 0; }
@media (max-width: 700px) { .vz-frame iframe { height: 1100px; } .vz { padding-left: 16px; padding-right: 16px; } }

/* inside the textbook chapters */
.vz-chapter { margin: 28px 0; padding: 20px; border: 1px solid var(--line); border-radius: var(--r); background: var(--bg-soft); }
.vz-fig { margin: 12px 0; } .vz-fig figcaption { text-align: center; font-size: 14px; color: var(--muted); margin-top: 8px; }
.vz-details { margin: 12px 0; } .vz-details summary { cursor: pointer; font-weight: 600; color: var(--ink); }
.vz-h3 { margin: 22px 0 8px; font-size: 18px; } .vz-inline { background: var(--panel); }
.vz-fine { font-size: 12px; color: var(--muted); margin: 14px 0 0; } .vz-fine a { color: var(--link); text-decoration: underline; }
