/*
 * Reset. Small on purpose — the goal is predictable box sizing and
 * media that can never widen its container, not a full normalise.
 * Overflow is fixed at the cause (a scrolling .table-wrap, a clamped
 * cell, minmax(0,1fr) tracks) — never by clipping html/body.
 */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body, h1, h2, h3, h4, p, ul, ol, figure, blockquote, dl, dd, pre { margin: 0; }
ul, ol { padding: 0; list-style: none; }
img, picture, video, canvas { display: block; }
img, svg, canvas, video { max-width: 100%; height: auto; }
/* Inline SVG icons size themselves via .icon; block-level charts via
   their own class. Both must be allowed to shrink inside a grid track. */
svg { min-width: 0; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: 0; padding: 0; touch-action: manipulation; }
a { color: inherit; text-decoration: none; }
table { border-collapse: collapse; border-spacing: 0; }
pre { max-width: 100%; overflow: auto; }
[hidden] { display: none !important; }
