.stage .gr-tile { cursor: grab; }
.stage .gr-svg.is-corner .gr-tile { cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M18.5 9A7 7 0 1 0 19 14' fill='none' stroke='%23fff' stroke-width='4' stroke-linecap='round'/%3E%3Cpath d='M18.5 9A7 7 0 1 0 19 14' fill='none' stroke='%232a2420' stroke-width='2' stroke-linecap='round'/%3E%3Cpath d='M20 4v6h-6' fill='none' stroke='%23fff' stroke-width='4' stroke-linejoin='round'/%3E%3Cpath d='M20 4v6h-6' fill='none' stroke='%232a2420' stroke-width='2' stroke-linejoin='round'/%3E%3C/svg%3E") 12 12, crosshair; }
.stage .gr-svg.is-grabbing .gr-tile { cursor: grabbing; }
.stage .gr-svg.is-done .gr-tile { cursor: default; }

.stage .gr-grid-line { fill: none; stroke: #d4a640; stroke-width: 1; }
.stage .gr-grid-glow { fill: none; stroke: #f0d27a; stroke-width: 3.5; opacity: .35; }
.stage .gr-ideal { fill: none; stroke: #f0d27a; stroke-width: 1.4; stroke-dasharray: 5 3; }
.stage .gr-pill { fill: rgba(42, 36, 32, .84); }
.stage .gr-pill.is-ok { fill: #d4a640; }
.stage .gr-label { font: 600 13px var(--mono); fill: #fbf6ec; letter-spacing: -0.02em; }
.stage .gr-check { fill: none; stroke: #fff; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }

.stage .gr-grid.is-anim { animation: gr-fade .7s ease-out both; }
.stage .gr-mark.is-anim { animation: gr-fade .4s ease-out both; }
@keyframes gr-fade { from { opacity: 0; } to { opacity: 1; } }
