:root{
  color-scheme: light;
  --ink:#2a2a2a; --pencil:#555; --faint:#e4e2dc; --paper:#fdfcf9; --bg:#f4f3ef; --line:#d9d6ce;
  --lentil:#9a5a2b; --rice:#3e6b8a;
  --ok:#2f6b3a; --ok-bg:#edf5ee; --no:#a33a2c; --no-bg:#fbefec; --ask:#3a3f47; --ask-bg:#efeee9;
  --serif: "Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink)}
body{font:17px/1.5 var(--serif)}
.stage{max-width:980px;margin:0 auto;padding:20px 16px 40px;display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:22px;align-items:start}
.figcol{position:sticky;top:12px}
.figwrap{background:var(--paper);border:1px solid var(--line);border-radius:10px;overflow:hidden}
#fig{display:block;width:100%;height:auto;max-height:calc(100vh - 110px);touch-action:none;user-select:none;-webkit-user-select:none}
#fig text{font-family:var(--serif);fill:var(--pencil)}
#fig .tick{font-size:10px}
#fig .axt{font-size:12px;font-style:italic}
#fig .lab{font-size:12.5px;font-style:italic}
#fig .num{font-size:12.5px;fill:var(--ink)}
#fig [data-part]{cursor:pointer}
#fig .drag{cursor:grab}
.note{min-height:2.6em;padding:8px 4px 0;font-size:15.5px;color:var(--ask);text-align:center}
.note .katex{font-size:1.05em}

.controls{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.controls:empty{display:none}
.controls.arrive{animation:arrive .5s ease-out}
.ctl{display:grid;grid-template-columns:78px 38px minmax(0,1fr) 38px 34px;align-items:center;gap:6px;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:6px 8px}
.ctl .nm{font-style:italic;display:flex;align-items:center;gap:6px}
.ctl .sw{width:16px;height:3px;border-radius:2px;display:inline-block}
.ctl output{text-align:right;font-variant-numeric:tabular-nums}
.ctl input[type=range]{width:100%;accent-color:var(--ink)}
.ctl.pulse{animation:pulse 1s ease-out 2}
.ctl button{padding:4px 0;font-size:20px;line-height:1}
.turnrow{display:flex;gap:8px}
.turnrow.pulse button{animation:pulse 1s ease-out 2}

.card{background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:16px 16px 14px;min-height:120px}
.card.arrive{animation:arrive .45s ease-out}
.card.leave{animation:leave .25s ease-in forwards}
.card p{margin:0 0 10px}
.card .type{font-weight:700}
.part{border-top:1px dashed var(--line);margin-top:12px;padding-top:12px;animation:arrive .45s ease-out}
@keyframes arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes leave{to{opacity:0;transform:translateY(-8px)}}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(42,42,42,.35)}100%{box-shadow:0 0 0 10px rgba(42,42,42,0)}}

table.food{border-collapse:collapse;margin:4px 0 14px;font-size:16px}
table.food th,table.food td{padding:4px 12px;text-align:right;border-bottom:1px solid var(--line)}
table.food th{font-weight:400;font-style:italic;color:var(--pencil)}
table.food td:first-child,table.food th:first-child{text-align:left;padding-left:0}

button{font:inherit;font-size:16px;border-radius:8px;padding:7px 16px;cursor:pointer;border:1px solid var(--ink);background:var(--ink);color:#fff;touch-action:manipulation}
button.ghost{background:#fff;color:var(--ink);border-color:#bdb9b0}
button:disabled{opacity:.35;cursor:not-allowed}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px}
.row.fade{animation:arrive .5s ease-out}
.verdict{border-radius:8px;padding:8px 12px;margin:10px 0 0;font-size:16px}
.verdict:empty{display:none}
.verdict.ok{background:var(--ok-bg);color:var(--ok)}
.verdict.no{background:var(--no-bg);color:var(--no)}
.verdict.ask{background:var(--ask-bg);color:var(--ask)}

input.entry{width:52px;font:inherit;font-size:17px;padding:4px 4px;border:1px solid #b9b5ab;border-radius:6px;text-align:center;background:#fff}
input.entry:focus{outline:2px solid var(--ink);outline-offset:1px}
input.entry.bad{border-color:var(--no);background:var(--no-bg)}
input.entry:disabled{background:transparent;border-color:transparent;color:var(--ink);opacity:1}

.src{text-align:center;margin:4px 0 10px;font-size:17px}
.lines{display:grid;grid-template-columns:auto 1fr;gap:8px 8px;align-items:center}
.lines .rl{font-style:italic;color:var(--pencil);font-size:14px}
.lines .eq{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;font-size:18px;white-space:nowrap}
.lines .v{font-style:italic;display:inline-block;min-width:.7em;transition:opacity .3s}
.lines .v.sub{font-style:normal}

/* a matrix: a grid with bracket rules */
.mx{display:inline-grid;gap:4px 8px;padding:4px 12px;position:relative;align-items:center;justify-items:center;vertical-align:middle}
.mx::before,.mx::after{content:"";position:absolute;top:0;bottom:0;width:8px;border:1.6px solid var(--ink)}
.mx::before{left:0;border-right:none;border-radius:6px 0 0 6px}
.mx::after{right:0;border-left:none;border-radius:0 6px 6px 0}
.mx .cell{min-width:40px;height:34px;display:flex;align-items:center;justify-content:center;font-size:18px;font-variant-numeric:tabular-nums}
.mx .cell.empty{border:1px dashed #c9c5bb;border-radius:6px}
.mx .cell.fill{animation:arrive .35s ease-out}
.mxwrap{display:grid;grid-template-columns:auto auto;gap:4px 6px;align-items:center;justify-content:start}
.mxwrap .rh{font-style:italic;color:var(--pencil);font-size:13.5px;text-align:right}
.mxwrap .ch{display:grid;gap:8px;padding:0 12px;font-size:12.5px;color:var(--pencil);text-align:center;line-height:1.2}
.apply{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:18px}
.vecin{display:inline-flex;flex-direction:column;gap:4px;padding:3px 10px;position:relative}
.vecin::before,.vecin::after{content:"";position:absolute;top:0;bottom:0;width:6px;border:1.6px solid var(--ink)}
.vecin::before{left:0;border-right:none;border-radius:6px 0 0 6px}
.vecin::after{right:0;border-left:none;border-radius:0 6px 6px 0}
.vecin span{text-align:center;min-width:24px}
.fly{position:fixed;z-index:10;font:17px var(--serif);color:var(--ink);background:rgba(255,255,255,.9);border-radius:4px;padding:0 3px;pointer-events:none;transition:transform .8s cubic-bezier(.4,.0,.2,1)}
.tabs{display:flex;gap:8px;flex-wrap:wrap}
.tabs button[aria-pressed=true]{background:var(--ink);color:#fff}
.tabs button[aria-pressed=false]{background:#fff;color:var(--ink);border-color:#bdb9b0}
.sr{position:absolute;left:-9999px}

@media (max-width:760px){
  .stage{grid-template-columns:1fr;gap:12px;padding:12px 16px 32px}
  .figcol{position:static}
  #fig{max-height:52vh}
  .note{min-height:2.2em;font-size:15px;padding-top:6px}
  .controls{margin-bottom:10px}
}
@media (max-width:400px){
  .ctl{grid-template-columns:66px 34px minmax(0,1fr) 34px 30px;gap:4px;padding:5px 6px}
  input.entry{width:46px}
  .lines .eq{font-size:16px}
}
#fig .flash{animation:blink .5s ease-in-out 3}
@keyframes blink{50%{opacity:.2}}
.entryv{display:inline-block;min-width:1.2em;text-align:center;font-variant-numeric:tabular-nums;padding:0 2px}
.lines .v.sub{margin-left:3px}
/* the closing beats: definition, theorem, proof */
.proof{overflow-x:auto;overflow-y:hidden;padding:2px 0}
.proof.small{font-size:15px;color:var(--pencil)}
.three{display:flex;gap:10px;flex-wrap:wrap;justify-content:space-between;margin-top:6px}
.mxcard{text-align:center}
.mxcard .rl{font-style:italic;color:var(--pencil);font-size:13.5px;margin-bottom:2px}
