/* No Rush · #/keys: the 256 one-time keys as a sheet of foil key tags, the Merkle root as a guilloche seal, the
   signature replay (digest -> 67 chains -> leaf -> 8 levels -> root, computed in the browser) and the schematic
   "how a one-time hash key works" drawings. Scoped to .keys-page. */

.keys-page { padding-bottom: 20px; }
.keys-page .keys-head { padding-bottom: 24px; }
.keys-page .keys-head h1 { font-size: clamp(36px, 5.6vw, 64px); }
.keys-page .keys-quote { font-size: 14px; color: var(--ink-2); padding: 10px 14px; border-left: 2px solid var(--magenta); background: color-mix(in srgb, var(--magenta) 6%, transparent); max-width: 74ch; }
.keys-page .keys-stale { margin: 0 0 12px; padding: 8px 12px; border: 1px solid var(--err); border-radius: var(--r); font-size: 13px; }

.keys-page .keys-stage { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 18px; align-items: start; }

/* ---------------------------------------------------------------- the sheet of 256 key tags */
.keys-page .keys-sheet { padding: 22px 22px 18px; }
.keys-page .ks-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
.keys-page .ks-head .plate-title { margin: 0; }
.keys-page .ks-stats { font-size: 12.5px; color: var(--ink-2); }
.keys-page .ks-stats .tba { font: 600 13px/1.3 var(--font-sans); font-size: 13px; }
.keys-page .sheet {
  --mx: .5; --my: .5;
  display: grid; grid-template-columns: repeat(16, minmax(0, 1fr)); gap: 4px; padding: 10px; border: 1px solid var(--line); border-radius: 3px;
  background: repeating-linear-gradient(45deg, transparent 0 7px, color-mix(in srgb, var(--guilloche) 6%, transparent) 7px 8px), color-mix(in srgb, var(--bg) 55%, transparent);
}
.keys-page .kc {
  --fx: calc((var(--c) / 15 - var(--mx)) * 120%); --fy: calc((var(--r) / 15 - var(--my)) * 120%);
  position: relative; aspect-ratio: 1; min-width: 0; padding: 0; cursor: pointer; overflow: hidden; border-radius: 3px 3px 3px 9px;
  border: 1px solid var(--line); background: color-mix(in srgb, var(--plate-2) 100%, transparent); color: var(--muted);
  font: 600 10px/1 var(--nr-mono); transition: transform var(--t-fast) var(--ease), border-color var(--t-fast), box-shadow var(--t-fast);
}
.keys-page .kc:hover { transform: translateY(-2px) scale(1.06); border-color: var(--line-2); z-index: 2; }
.keys-page .kc:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; z-index: 3; }
.keys-page .kc-n { position: absolute; left: 4px; top: 4px; font-size: clamp(7px, .7vw, 10px); letter-spacing: -.02em; }
.keys-page .kc-g { position: absolute; inset: 0; pointer-events: none; opacity: 0; }
.keys-page .kc-st { position: absolute; inset: auto 2px 2px 2px; display: grid; justify-items: end; line-height: 1; pointer-events: none; }
.keys-page .kc-st b { font-size: clamp(6px, .62vw, 9px); color: var(--seal); }
.keys-page .kc-st i { font-style: normal; font-size: clamp(5px, .5vw, 7px); letter-spacing: .04em; color: var(--seal); opacity: .9; }
/* unused: blank foil */
.keys-page .kc-free { background: linear-gradient(135deg, color-mix(in srgb, var(--plate-2) 100%, transparent), color-mix(in srgb, var(--bg) 60%, transparent)); }
.keys-page .kc-free .kc-g { opacity: .1; background: var(--foil); background-size: 300% 300%; background-position: var(--fx) var(--fy); }
/* used: foil, punched, stamped */
.keys-page .kc-used { color: #1a1430; border-color: color-mix(in srgb, var(--ink) 30%, transparent); }
.keys-page .kc-used .kc-g { opacity: .9; background: var(--foil); background-size: 300% 300%; background-position: var(--fx) var(--fy); transition: background-position 400ms var(--ease); }
.keys-page .kc-used::after {
  /* the punch hole */
  content: ""; position: absolute; right: 22%; top: 20%; width: 24%; aspect-ratio: 1; border-radius: 50%; z-index: 2;
  background: var(--bg); box-shadow: inset 0 1px 2px rgba(0, 0, 0, .7), 0 0 0 1px color-mix(in srgb, var(--ink) 30%, transparent);
}
.keys-page .kc-used .kc-n, .keys-page .kc-used .kc-st { z-index: 1; }
.keys-page .kc-used .kc-n { color: #1a1430; font-weight: 700; }
.keys-page .kc-used.st-6 .kc-g { filter: saturate(.4) brightness(.85); }
.keys-page .kc-used.st-1 { box-shadow: 0 0 0 1px var(--amber), 0 0 12px -2px var(--amber); }
/* the next key glows */
.keys-page .kc-next { border-color: var(--accent); color: var(--accent); box-shadow: var(--glow); animation: kcNext 2.4s ease-in-out infinite; }
.keys-page .kc-next .kc-st i { color: var(--accent); font-size: clamp(5px, .5vw, 7px); }
@keyframes kcNext { 50% { box-shadow: 0 0 2px var(--accent), 0 0 18px color-mix(in srgb, var(--accent) 60%, transparent); } }
.keys-page .kc.sel { outline: 2px solid var(--magenta); outline-offset: 1px; z-index: 2; }
/* replay highlight: the subtree a node covers (ours vs the sibling's) */
.keys-page .kc.lit-me { box-shadow: 0 0 0 1px var(--green), 0 0 10px -2px var(--green); }
.keys-page .kc.lit-sib { box-shadow: 0 0 0 1px color-mix(in srgb, var(--cyan) 70%, transparent); }
/* before launch / while loading: an empty sheet */
.keys-page .sheet-blank .kc { cursor: default; opacity: .55; }
.keys-page .sheet-blank .kc:hover { transform: none; }
.keys-page .ks-legend { list-style: none; margin: 14px 0 0; padding: 0; display: flex; gap: 8px 18px; flex-wrap: wrap; font-size: 12px; color: var(--muted); }
.keys-page .ks-legend li { display: inline-flex; align-items: center; gap: 7px; }
.keys-page .ks-legend i { width: 14px; height: 14px; border-radius: 2px 2px 2px 5px; border: 1px solid var(--line-2); }
.keys-page .ks-legend .lg-u i { background: var(--foil); }
.keys-page .ks-legend .lg-n i { border-color: var(--accent); box-shadow: var(--glow); }
.keys-page .ks-legend .lg-f i { background: var(--plate-2); }

/* ---------------------------------------------------------------- the root seal and the key detail */
.keys-page .keys-seal { padding: 22px; display: grid; gap: 16px; }
.keys-page .seal-box { position: relative; width: min(100%, 300px); margin: 0 auto; }
.keys-page .seal-box .ro-center { fill: var(--accent); letter-spacing: .12em; }
.keys-page .seal-box.sealed .rosette { filter: drop-shadow(0 0 10px color-mix(in srgb, var(--ok) 45%, transparent)); }
.keys-page .seal-box.sealed .ro-rim { stroke: var(--ok); }
.keys-page .seal-box.unsealed .ro-rim { stroke: var(--err); }
.keys-page .seal-stamp { position: absolute; left: 50%; bottom: 10%; transform: translateX(-50%) rotate(-8deg); white-space: nowrap; font-size: 12px; padding: 5px 10px; border-width: 2px; background: color-mix(in srgb, var(--bg) 60%, transparent); }
.keys-page .seal-stamp.stamp-in { animation: sealIn 560ms var(--ease) both; }
@keyframes sealIn { 0% { transform: translateX(-50%) scale(2.2) rotate(-18deg); opacity: 0; } 60% { transform: translateX(-50%) scale(.94) rotate(-6deg); opacity: 1; } 100% { transform: translateX(-50%) scale(1) rotate(-8deg); } }
.keys-page .seal-kv { margin: 0; display: grid; gap: 0; border-top: 1px solid var(--line); }
.keys-page .seal-kv > div { display: grid; gap: 3px; padding: 9px 0; border-bottom: 1px dashed var(--line); min-width: 0; }
.keys-page .seal-kv dt { font: 600 10px/1.3 var(--nr-mono); letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.keys-page .seal-kv dd { margin: 0; font-size: 13px; min-width: 0; overflow-wrap: anywhere; }
.keys-page .seal-kv .tba { font: 600 13px/1.3 var(--font-sans); }
.keys-page .key-detail { padding: 14px 16px; border: 1px solid var(--line-2); border-radius: var(--r); background: color-mix(in srgb, var(--bg) 45%, transparent); }
.keys-page .key-detail p { margin: 8px 0 0; font-size: 13.5px; line-height: 1.6; color: var(--ink-2); }
.keys-page .kd-pick { margin: 0 !important; }
.keys-page .kd-title { margin: 0; display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.keys-page .kd-no { font: 700 18px/1.2 var(--nr-mono); color: var(--accent); }
.keys-page .kd-title .mono { font-size: 11px; letter-spacing: .1em; }
.keys-page .kd-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 10px; font-size: 12.5px; }
.keys-page .kd-acts { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }

/* ---------------------------------------------------------------- the replay */
.keys-page .replay { margin-top: 18px; padding: 24px 26px; border-color: var(--line-2); scroll-margin-top: 80px; }
.keys-page .rp-head .plate-title { margin-bottom: 8px; }
.keys-page .rp-lead { margin: 0; font-size: 14px; line-height: 1.65; color: var(--ink-2); max-width: 82ch; }
.keys-page .rp-pick { margin-top: 16px; display: grid; gap: 10px; }
.keys-page .rp-pick:empty { display: none; }
.keys-page .rp-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.keys-page .rp-chip {
  display: inline-flex; align-items: baseline; gap: 7px; padding: 6px 11px; cursor: pointer; color: var(--ink-2);
  border: 1px solid var(--line-2); border-radius: 999px; background: var(--plate); font-size: 12.5px;
}
.keys-page .rp-chip b { font: 700 12px/1 var(--nr-mono); color: var(--accent); }
.keys-page .rp-chip:hover { border-color: var(--accent); }
.keys-page .rp-chip.on { border-color: var(--magenta); color: var(--ink); box-shadow: var(--glow-m); }
.keys-page .rp-ctl { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.keys-page .rp-body { margin-top: 16px; }
.keys-page .rp-msg { margin: 0; padding: 14px 16px; border: 1px dashed var(--line-2); border-radius: var(--r); font-size: 14px; line-height: 1.6; color: var(--ink-2); }
.keys-page .rp-steps { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; counter-reset: none; }
.keys-page .rs { display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: 14px; padding: 14px 16px; border: 1px solid var(--line); border-radius: var(--r); background: color-mix(in srgb, var(--bg) 40%, transparent); transition: border-color var(--t-med), opacity var(--t-med); }
.keys-page .rs[data-s="wait"] { opacity: .45; }
.keys-page .rs[data-s="run"] { border-color: var(--accent); box-shadow: var(--glow); }
.keys-page .rs[data-s="ok"] { border-color: color-mix(in srgb, var(--ok) 50%, transparent); }
.keys-page .rs[data-s="fail"] { border-color: var(--err); }
.keys-page .rs-n { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%; border: 1.5px solid var(--line-2); font: 700 14px/1 var(--nr-mono); color: var(--muted); }
.keys-page .rs[data-s="run"] .rs-n { border-color: var(--accent); color: var(--accent); animation: rsPulse 1.2s ease-in-out infinite; }
.keys-page .rs[data-s="ok"] .rs-n { border-color: var(--ok); color: var(--ok); background: color-mix(in srgb, var(--ok) 12%, transparent); }
.keys-page .rs[data-s="fail"] .rs-n { border-color: var(--err); color: var(--err); }
@keyframes rsPulse { 50% { box-shadow: 0 0 14px color-mix(in srgb, var(--accent) 60%, transparent); } }
.keys-page .rs-c { min-width: 0; }
.keys-page .rs-c h3 { margin: 4px 0 4px; font: 700 15px/1.3 var(--font-sans); }
.keys-page .rs-h { margin: 0; font-size: 12.5px; line-height: 1.6; color: var(--muted); overflow-wrap: anywhere; }
.keys-page .rs-out { margin-top: 10px; min-width: 0; }
.keys-page .rs-out:empty { display: none; }
.keys-page .fields { margin: 0; display: grid; gap: 0; }
.keys-page .fr { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 12px; padding: 6px 0; border-bottom: 1px dashed var(--line); font-size: 13px; }
.keys-page .fr:last-child { border-bottom: 0; }
.keys-page .fr dt { color: var(--muted); font: 600 11px/1.6 var(--nr-mono); letter-spacing: .08em; }
.keys-page .fr dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.keys-page .rp-note { font-family: var(--font-serif); color: var(--ink); }
.keys-page .checks { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 4px; font-size: 13px; }
.keys-page .checks .ok { color: var(--ok); }
.keys-page .checks .err { color: var(--err); }
.keys-page .checks .muted { color: var(--muted); }
.keys-page .abi { display: grid; gap: 2px; padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--r); background: color-mix(in srgb, var(--bg) 60%, transparent); }
.keys-page .abi-w { display: grid; grid-template-columns: 82px minmax(0, 1fr); gap: 10px; align-items: baseline; font-size: 11.5px; animation: abiIn 420ms var(--ease) both; animation-delay: calc(var(--i, 0) * 60ms); }
.keys-page .abi-w span { color: var(--muted); font: 600 10.5px/1.4 var(--nr-mono); }
.keys-page .abi-w code { font: 500 11px/1.4 var(--nr-mono); color: var(--ink-2); overflow-wrap: anywhere; word-break: break-all; }
@keyframes abiIn { from { opacity: 0; transform: translateX(-6px); } }
.keys-page .digest { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-top: 10px; }
.keys-page .digest .label { flex: none; }
.keys-page .hash-big { font-size: 13.5px; color: var(--accent); text-shadow: 0 0 10px color-mix(in srgb, var(--accent) 30%, transparent); }
.keys-page .digits { display: grid; grid-template-columns: repeat(34, minmax(0, 1fr)); gap: 3px; margin-top: 10px; }
.keys-page .dgt {
  display: grid; place-items: center; aspect-ratio: 1 / 1.25; border-radius: 2px; font: 600 11px/1 var(--nr-mono); color: var(--ink);
  background: color-mix(in srgb, var(--cyan) calc(var(--v) * 45%), transparent); border: 1px solid var(--line); animation: abiIn 300ms var(--ease) both; animation-delay: calc(var(--i, 0) * 9ms);
}
.keys-page .dgt.cs { background: color-mix(in srgb, var(--amber) calc(20% + var(--v) * 40%), transparent); border-color: var(--amber); }
.keys-page .ch-wrap { position: relative; padding: 10px; border: 1px solid var(--line); border-radius: var(--r); background: color-mix(in srgb, var(--bg) 70%, transparent); }
.keys-page .ch-canvas { display: block; width: 100%; height: 230px; cursor: crosshair; }
.keys-page .ch-meta { display: flex; justify-content: space-between; gap: 12px; margin-top: 8px; font-size: 12px; min-height: 1.4em; flex-wrap: wrap; }
.keys-page .ch-cap { color: var(--ink-2); }
.keys-page .ch-cnt { color: var(--accent); }
.keys-page .ch-tick { margin-top: 4px; font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.keys-page .ch-legend { list-style: none; margin: 8px 0 0; padding: 0; display: flex; gap: 6px 16px; flex-wrap: wrap; font-size: 11.5px; color: var(--muted); }
.keys-page .ch-legend li::before { content: ""; display: inline-block; width: 10px; height: 8px; margin-right: 6px; border-radius: 1px; vertical-align: 0; }
.keys-page .ch-legend .lg-hidden::before { background: color-mix(in srgb, var(--muted) 30%, transparent); }
.keys-page .ch-legend .lg-sig::before { background: var(--magenta); }
.keys-page .ch-legend .lg-calc::before { background: var(--cyan); }
.keys-page .ch-legend .lg-top::before { background: var(--green); }
.keys-page .path-wrap { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 16px; align-items: start; }
.keys-page .mini-sheet { display: grid; grid-template-columns: repeat(16, 1fr); gap: 1.5px; padding: 6px; border: 1px solid var(--line); border-radius: 2px; background: color-mix(in srgb, var(--bg) 60%, transparent); }
.keys-page .mini-sheet i { aspect-ratio: 1; border-radius: 1px; background: color-mix(in srgb, var(--muted) 22%, transparent); transition: background 300ms; }
.keys-page .mini-sheet i.lit-sib { background: color-mix(in srgb, var(--cyan) 55%, transparent); }
.keys-page .mini-sheet i.lit-me { background: var(--green); box-shadow: 0 0 4px var(--green); }
.keys-page .ladder { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.keys-page .lad { display: grid; grid-template-columns: 92px minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 6px 10px; border: 1px solid var(--line); border-radius: 2px; font-size: 12px; animation: abiIn 360ms var(--ease) both; }
.keys-page .lad-l { font: 700 12px/1.2 var(--nr-mono); color: var(--ink); }
.keys-page .lad-l small { display: block; font: 500 10.5px/1.3 var(--nr-mono); color: var(--muted); }
.keys-page .lad-s { color: var(--muted); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.keys-page .lad-s code { font: 500 11px/1 var(--nr-mono); color: var(--ink-2); }
.keys-page .lad-o { font: 600 11.5px/1 var(--nr-mono); color: var(--accent); }
.keys-page .lad-root { border-color: var(--ok); box-shadow: 0 0 14px -4px var(--ok); }
.keys-page .lad-root .lad-o { color: var(--ok); }
.keys-page .rp-result { margin-top: 14px; }
.keys-page .rp-result:empty { display: none; }
.keys-page .rp-verdict { position: relative; padding: 18px 20px; border: 1px solid var(--line-2); border-radius: 3px; display: grid; gap: 10px; }
.keys-page .rp-verdict.v-ok { border-color: var(--ok); background: color-mix(in srgb, var(--ok) 7%, transparent); box-shadow: 0 0 34px -12px var(--ok); }
.keys-page .rp-verdict.v-bad { border-color: var(--err); background: color-mix(in srgb, var(--err) 7%, transparent); }
.keys-page .rp-verdict p { margin: 0; font-size: 14px; color: var(--ink-2); }
.keys-page .rp-stamp { justify-self: start; font-size: 15px; padding: 7px 14px; border-width: 3px; }
.keys-page .rp-fail { margin: 0; padding: 12px 14px; border: 1px solid var(--err); border-radius: var(--r); }

/* ---------------------------------------------------------------- how it works */
.keys-page .howto { margin-top: 30px; }
.keys-page .hd-head h2 { margin: 0; font: 800 24px/1.2 var(--font-serif); letter-spacing: .04em; }
.keys-page .hd-head p { margin: 8px 0 0; color: var(--muted); font-size: 13.5px; }
/* three cards over two: the drawings stay large enough to read */
.keys-page .hd-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 14px; margin-top: 16px; }
.keys-page .hd-card { grid-column: span 2; }
.keys-page .hd-card:nth-child(n + 4) { grid-column: span 3; }
.keys-page .hd-card:nth-child(n + 4) .hd-svg { max-width: 420px; justify-self: center; }
.keys-page .hd-card { margin: 0; padding: 16px; display: grid; grid-template-rows: auto 1fr; gap: 12px; border: 1px solid var(--line); border-radius: 3px; background: linear-gradient(180deg, var(--plate-2), var(--plate)); }
.keys-page .hd-card figcaption b { display: block; font: 700 14px/1.3 var(--font-sans); color: var(--ink); }
.keys-page .hd-card figcaption span { display: block; margin-top: 6px; font-size: 12.5px; line-height: 1.6; color: var(--ink-2); }
.keys-page .hd-svg { width: 100%; height: auto; align-self: end; overflow: visible; }
.keys-page .hd-svg text { font-family: var(--font-sans); }
.keys-page .hd-t { fill: var(--ink-2); font-size: 9.5px; }
.keys-page .hd-m { fill: var(--muted); }
.keys-page .hd-v { font-size: 8.5px; fill: var(--muted); }
.keys-page .hd-mono { font-family: var(--nr-mono), monospace !important; font-size: 10px; fill: var(--ink); }
.keys-page .hd-x { fill: var(--err); }
.keys-page .hd-dots { fill: var(--muted); font-size: 16px; }
.keys-page .hd-cell { fill: color-mix(in srgb, var(--cyan) 35%, transparent); }
.keys-page .hd-cell.hd-top { fill: var(--green); }
.keys-page .hd-cell.hd-hid { fill: color-mix(in srgb, var(--muted) 22%, transparent); }
.keys-page .hd-cell.hd-rev { fill: var(--magenta); }
.keys-page .hd-cell.hd-calc { fill: color-mix(in srgb, var(--cyan) 70%, transparent); }
.keys-page .hd-cell.hd-up0 { fill: none; stroke: var(--line-2); stroke-width: .6; }
.keys-page .hd-secret { fill: var(--seal); }
.keys-page .hd-link { fill: none; stroke: var(--line-2); stroke-width: .8; }
.keys-page .hd-leaf { fill: color-mix(in srgb, var(--green) 30%, transparent); stroke: var(--green); stroke-width: 1; }
.keys-page .hd-node { fill: var(--bg-3); stroke: var(--cyan); stroke-width: 1; }
.keys-page .hd-rootc { fill: none; stroke: var(--accent); stroke-width: 1.4; }
.keys-page .hd-rootc2 { fill: var(--accent); opacity: .5; }
.keys-page .hd-msg { fill: none; stroke: var(--line-2); }
.keys-page .hd-dg { fill: color-mix(in srgb, var(--cyan) 14%, transparent); stroke: var(--cyan); stroke-width: .7; }
.keys-page .hd-dg.hd-cs { fill: color-mix(in srgb, var(--amber) 16%, transparent); stroke: var(--amber); }
.keys-page .hd-arrow { fill: none; stroke: var(--muted); stroke-width: 1; }
.keys-page .hd-arrowhead { fill: var(--muted); }
.keys-page .hd-brace { fill: none; stroke: var(--cyan); stroke-width: 1.2; }
.keys-page .hd-brace-x { stroke: var(--err); stroke-dasharray: 3 2; }

/* daylight */
:root[data-theme="day"] .keys-page .kc-used { color: #2a2410; }
:root[data-theme="day"] .keys-page .sheet { background: repeating-linear-gradient(45deg, transparent 0 7px, rgba(31, 58, 95, .05) 7px 8px), #f6f1e4; }

/* stale */
.keys-page.is-stale .keys-stage, .keys-page.is-stale .replay { opacity: .8; }

/* ---------------------------------------------------------------- responsive */
@media (max-width: 1180px) {
  .keys-page .hd-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .keys-page .hd-card, .keys-page .hd-card:nth-child(n + 4) { grid-column: span 1; }
  .keys-page .hd-card:last-child { grid-column: 1 / -1; }
}
@media (max-width: 980px) {
  .keys-page .keys-stage { grid-template-columns: minmax(0, 1fr); }
  .keys-page .keys-seal { grid-template-columns: minmax(0, 220px) minmax(0, 1fr); align-items: start; }
  .keys-page .key-detail { grid-column: 1 / -1; }
  .keys-page .digits { grid-template-columns: repeat(23, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .keys-page .keys-sheet { padding: 16px 12px 14px; }
  .keys-page .sheet { gap: 2px; padding: 6px; }
  .keys-page .kc { border-radius: 2px 2px 2px 5px; }
  .keys-page .kc-n { font-size: 6px; left: 2px; top: 2px; }
  .keys-page .kc-st { display: none; }
  .keys-page .keys-seal { grid-template-columns: minmax(0, 1fr); padding: 18px 16px; }
  .keys-page .replay { padding: 18px 14px; }
  .keys-page .rs { grid-template-columns: minmax(0, 1fr); gap: 8px; padding: 12px; }
  .keys-page .fr { grid-template-columns: minmax(0, 1fr); gap: 2px; }
  .keys-page .abi-w { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .keys-page .digits { grid-template-columns: repeat(12, minmax(0, 1fr)); }
  .keys-page .ch-canvas { height: 190px; }
  .keys-page .path-wrap { grid-template-columns: minmax(0, 1fr); }
  .keys-page .mini-sheet { max-width: 180px; }
  .keys-page .lad { grid-template-columns: minmax(0, 1fr) auto; }
  .keys-page .lad-s { grid-column: 1 / -1; grid-row: 2; }
  .keys-page .hd-grid { grid-template-columns: minmax(0, 1fr); }
  .keys-page .hd-card:last-child { grid-column: auto; }
}
@media (prefers-reduced-motion: reduce) {
  .keys-page .kc-next, .keys-page .rs[data-s="run"] .rs-n, .keys-page .abi-w, .keys-page .dgt, .keys-page .lad, .keys-page .seal-stamp.stamp-in { animation: none !important; }
}
