.g-tower-of-hanoi{max-width:100%;margin:0 auto;padding:4px 0 2px;user-select:none;-webkit-user-select:none}.g-tower-of-hanoi .th-pegs{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.g-tower-of-hanoi .th-peg{position:relative;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding:0 0 26px;cursor:pointer;border-radius:12px;border:2px solid transparent;background:var(--surface-2);min-height:calc(var(--stackh,160px) + 36px);-webkit-tap-highlight-color:transparent}.g-tower-of-hanoi .th-peg:hover{border-color:var(--line)}.g-tower-of-hanoi .th-peg.is-goal{background:var(--accent-soft)}.g-tower-of-hanoi .th-peg:focus-visible{outline:3px solid var(--focus);outline-offset:1px}.g-tower-of-hanoi .th-peg.is-selected{border-color:var(--accent)}.g-tower-of-hanoi .th-peg.is-drop{border-color:var(--accent);border-style:dashed}.g-tower-of-hanoi .th-peg.is-hint-from{border-color:var(--gold);box-shadow:0 0 0 3px rgba(242,193,78,.5)}.g-tower-of-hanoi .th-peg.is-hint-to{border-color:var(--accent);box-shadow:0 0 0 3px rgba(31,111,92,.35)}.g-tower-of-hanoi .th-peg.is-bad{border-color:var(--danger);animation:th-shake .3s}.g-tower-of-hanoi .th-rod{position:absolute;bottom:26px;left:50%;width:10px;margin-left:-5px;height:calc(var(--stackh,160px) + 8px);border-radius:5px 5px 0 0;background:#8d7b68}.g-tower-of-hanoi .th-base{position:absolute;bottom:20px;left:4%;right:4%;height:8px;border-radius:4px;background:#6d5d4d}.g-tower-of-hanoi .th-stack{position:relative;z-index:1;display:flex;flex-direction:column-reverse;align-items:center;width:100%;margin-bottom:8px}.g-tower-of-hanoi .th-label{position:absolute;bottom:0;left:0;right:0;height:22px;text-align:center;font-weight:700;font-size:.9rem;color:var(--ink-2);line-height:22px}.g-tower-of-hanoi .th-label small{font-weight:600;color:var(--accent);font-size:.75rem}.g-tower-of-hanoi .th-disc{height:var(--dh,24px);margin-top:1px;border-radius:calc(var(--dh,24px)/2);background:hsl(var(--hue),62%,44%);border:2px solid hsl(var(--hue),62%,30%);color:#fff;display:grid;place-items:center;font-weight:700;font-size:calc(var(--dh,24px) * .5);box-sizing:border-box;touch-action:none;transition:transform .12s}.g-tower-of-hanoi .th-disc[data-top="1"]{cursor:grab}.g-tower-of-hanoi .th-disc.is-lifted{transform:translateY(calc(var(--dh,24px) * -.7));box-shadow:0 6px 10px rgba(0,0,0,.28)}.g-tower-of-hanoi .th-disc.is-drag{transition:none;z-index:10;position:relative;cursor:grabbing;box-shadow:0 8px 14px rgba(0,0,0,.35)}@keyframes th-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}@media(prefers-reduced-motion:reduce){.g-tower-of-hanoi .th-disc,.g-tower-of-hanoi .th-peg.is-bad{transition:none;animation:none}}