:root { font-family: system-ui, sans-serif; color-scheme: light dark; }
body { margin: 0; background: Canvas; color: CanvasText; }
nav { display: flex; gap: 1rem; align-items: center; padding: .5rem 1rem; background: color-mix(in srgb, Canvas 90%, CanvasText); }
nav a { text-decoration: none; color: inherit; font-weight: 600; }
nav .right { margin-left: auto; display: flex; gap: .5rem; align-items: center; }
main { max-width: 900px; margin: 0 auto; padding: 1rem; }
.card { display: flex; flex-direction: column; gap: .75rem; padding: 1rem; border: 1px solid color-mix(in srgb, CanvasText 20%, transparent); border-radius: 8px; margin-bottom: 1rem; color: inherit; text-decoration: none; }
label { display: flex; flex-direction: column; gap: .25rem; }
input, select, button { font: inherit; padding: .5rem; }
button { cursor: pointer; }
.error { color: #c00; }
.bar { display: flex; flex-wrap: wrap; gap: 1rem; align-items: baseline; }
.bar h1 { margin: 0; font-size: 1.25rem; }
#board { display: grid; grid-auto-rows: 1fr; width: 100%; aspect-ratio: var(--ratio, 4/3); border: 2px solid color-mix(in srgb, CanvasText 40%, transparent); gap: 1px; background: color-mix(in srgb, CanvasText 15%, transparent); }
.slot { position: relative; background: Canvas; }
.slot.target { outline: 3px dashed dodgerblue; outline-offset: -3px; }
.slot.wrong { animation: shake .3s; }
@keyframes shake { 25% { transform: translateX(-4px); } 75% { transform: translateX(4px); } }
.piece { background-image: var(--img); background-size: calc(var(--cols) * 100%) calc(var(--rows) * 100%); background-position: var(--x) var(--y); aspect-ratio: var(--pr, 1); cursor: pointer; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,.4); }
.slot .piece { position: absolute; inset: 0; aspect-ratio: auto; border-radius: 0; box-shadow: none; cursor: default; }
.piece.selected { outline: 3px solid dodgerblue; transform: scale(1.05); }
#tray { display: grid; grid-template-columns: repeat(auto-fill, minmax(70px, 1fr)); gap: .5rem; margin-top: 1rem; }
#banner { position: fixed; inset: auto 1rem 1rem; padding: 1rem; background: seagreen; color: white; border-radius: 8px; text-align: center; font-size: 1.25rem; }
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 1rem; }
.grid img, img.full { width: 100%; border-radius: 4px; }
table { border-collapse: collapse; width: 100%; }
th, td { text-align: left; padding: .4rem; border-bottom: 1px solid color-mix(in srgb, CanvasText 20%, transparent); }
