.gpp{max-width:960px;margin:1em auto;color:inherit}
.gpp *{box-sizing:border-box}
.gpp-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin-bottom:6px}
.gpp-stats{display:flex;flex-wrap:wrap;gap:14px;font-variant-numeric:tabular-nums}
.gpp-btns{display:flex;gap:8px}
.gpp-btn{cursor:pointer;border:2px solid currentColor;background:transparent;color:inherit;border-radius:6px;padding:5px 14px;font:inherit;font-weight:600}
.gpp-btn:hover{background:rgba(128,128,128,.2)}
.gpp-help{margin:0 0 10px;font-size:.85em;opacity:.8;line-height:1.35}
.gpp-stage{position:relative;width:100%}
.gpp-board{position:absolute;background-color:#f6f3ec;
  background-image:linear-gradient(to right,rgba(0,0,0,.18) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.18) 1px,transparent 1px);
  background-size:var(--c) var(--c);box-shadow:0 0 0 3px #222,0 4px 14px rgba(0,0,0,.25);border-radius:2px}
.gpp-tray{position:absolute;background:rgba(128,128,128,.13);outline:2px dashed rgba(128,128,128,.5);outline-offset:-2px;border-radius:10px}
.gpp-piece{position:absolute;left:0;top:0;z-index:2;border-radius:5px;cursor:grab;user-select:none;-webkit-user-select:none;touch-action:none;
  display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:max(9px,calc(var(--u,var(--c))*.3));line-height:1;text-shadow:0 1px 2px rgba(0,0,0,.55);
  background-image:linear-gradient(to right,rgba(255,255,255,.28) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.28) 1px,transparent 1px);
  background-size:var(--u,var(--c)) var(--u,var(--c));
  box-shadow:inset 0 0 0 2px rgba(255,255,255,.4),0 2px 4px rgba(0,0,0,.35);
  transition:transform .2s ease,width .2s ease,height .2s ease;outline:none}
.gpp-piece:focus-visible{box-shadow:inset 0 0 0 2px #fff,0 0 0 3px #1e90ff}
.gpp-piece.gpp-dragging{transition:none;z-index:20;cursor:grabbing;box-shadow:inset 0 0 0 2px rgba(255,255,255,.5),0 10px 22px rgba(0,0,0,.45)}
.gpp-piece.gpp-bad{animation:gpp-bad .5s ease}
@keyframes gpp-bad{0%,100%{filter:none}25%,75%{filter:brightness(1.6) saturate(.4)}50%{filter:brightness(.6)}}
.gpp-msg{margin-top:10px;font-weight:700;min-height:1.4em}
.gpp.gpp-solved .gpp-board{box-shadow:0 0 0 3px #2e9d4f,0 0 24px rgba(46,157,79,.7)}
