:root{color-scheme:light;--ink:#244432;--green:#287848;--line:#d7e4d6;--paper:#fffef9}
*{box-sizing:border-box}
body{margin:0;background:#f3f6ed;color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Hiragino Sans","Yu Gothic",sans-serif;line-height:1.7}
a{color:var(--green)}
.site-header{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:12px;max-width:1040px;margin:auto;padding:8px 24px;border-bottom:1px solid var(--line);font-size:13px;font-weight:700}
.site-header a{text-decoration:none}
main{max-width:960px;margin:0 auto;padding:12px 24px}
.intro{text-align:center;margin-bottom:12px}
.site-header h1{font-size:18px;letter-spacing:.04em;line-height:1.5;margin:0;text-align:center}
.intro>p{font-size:14px;margin:0;color:#60715e}
.intro>p+p{font-size:12px;margin-top:4px}
.game-layout{display:grid;grid-template-columns:1fr;gap:14px;max-width:440px;margin:auto;align-items:start}
.play-area{display:flex;flex-direction:column;align-items:stretch;min-width:0;width:100%}
.puzzle-workspace{display:grid;grid-template-columns:minmax(0,3fr) minmax(100px,2fr);gap:12px;width:100%;align-items:start}
.board{--ratio:0.333333;display:grid;position:relative;gap:0;width:100%;aspect-ratio:var(--ratio);background:#d9e4d2;border-radius:8px;box-shadow:0 8px 28px #24443218;overflow:hidden;touch-action:manipulation}
.piece-panel{position:sticky;top:12px;min-width:0;width:100%;background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:10px}
.piece-panel h2{font-size:12px;margin:0 0 8px;text-align:center}
.pieces{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;max-height:80svh;overflow-y:auto;align-content:start;padding:3px}
.piece{aspect-ratio:1;touch-action:none;cursor:grab!important;border-radius:3px!important;box-shadow:0 0 0 1px var(--line)}
.piece[hidden]{display:none}
.tile.selected{outline:0}
.tile.dragging{opacity:.3}
.slot{background:#e3eadc!important;cursor:pointer!important}
.slot::after{box-shadow:inset 0 0 0 1px #a6b79c!important}
.slot.filled{background:white!important;cursor:grab!important;touch-action:none}
.piece-panel.drop-target{outline:3px solid var(--green)}
#return-piece{width:100%;margin-top:10px;padding:8px 2px;border:1px solid var(--line);border-radius:5px;background:white;color:var(--ink);font:inherit;font-size:11px;cursor:pointer}
#return-piece:disabled{opacity:.45;cursor:default}
.slot.drop-target{background:#b8d8a4!important;outline:3px solid var(--green);outline-offset:-3px}
.drag-ghost{position:fixed!important;z-index:1000;aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;box-shadow:0 5px 18px #0005;opacity:.95}
.tile{display:block;overflow:hidden;min-width:0;min-height:0;border:0;border-radius:0;margin:0;padding:0;background:white;position:relative;cursor:default;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.tile::after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 0 1px #ffffff70;pointer-events:none}
.tile.selected::after{z-index:2;box-shadow:inset 0 0 0 4px #b85b00,inset 0 0 0 6px #fff!important;background:#ffb52b20}
.tile img{position:absolute;display:block;height:auto;max-width:none;pointer-events:none;user-select:none}
.tile:disabled{opacity:1}
.board.complete .tile::after{box-shadow:none!important}
button,summary{font:inherit}
button:focus-visible,summary:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #d28c22;outline-offset:3px;z-index:1}
.tile:focus-visible{outline-offset:-4px}
.controls{width:100%;padding:12px 24px;background:var(--paper);border:1px solid var(--line);border-radius:16px}
.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;width:100%;padding:6px 12px;margin-bottom:12px;background:var(--paper);border:1px solid var(--line);border-radius:12px;text-align:center}
.stats span{display:block;font-size:11px;color:#6b7c68}
.stats strong{display:block;font-size:clamp(18px,5vw,24px);font-variant-numeric:tabular-nums;line-height:1.5;white-space:nowrap}
.controls>button{width:100%;border:1px solid var(--line);border-radius:8px;padding:11px 9px;background:white;color:var(--ink);font-size:13px}
.controls>button{margin-bottom:10px;cursor:pointer;font-weight:700}
.controls>button.primary{background:var(--green);border-color:var(--green);color:white}
.controls>button:hover{filter:brightness(.95)}
.controls>button:disabled{opacity:.5;cursor:wait}
details{border-top:1px solid var(--line);padding-top:8px;font-size:13px}
summary{cursor:pointer;font-weight:700}
details img{display:block;width:100%;height:auto;margin-top:8px;border-radius:4px}
details img[hidden]{display:none}
.hint{font-size:11px;color:#6b7c68;margin:10px 0 0}
.message{font-size:13px;text-align:center;min-height:2em;margin:14px 0 0}
.toast{position:fixed;z-index:1100;left:50%;bottom:calc(18px + env(safe-area-inset-bottom,0px));transform:translate(-50%,12px);width:max-content;max-width:calc(100% - 32px);margin:0;padding:12px 20px;border-radius:12px;background:#244432;color:white;box-shadow:0 4px 20px #0003;text-align:center;font-size:14px;line-height:1.6;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s,transform .18s,visibility .18s}
.toast.visible{opacity:1;visibility:visible;transform:translate(-50%,0)}
@media(prefers-reduced-motion:reduce){.toast{transition:none}}
footer{text-align:center;padding:4px 20px 12px;font-size:12px;color:#6b7c68}
@media(max-width:600px){.site-header{grid-template-columns:auto 1fr;padding:8px 16px;font-size:11px}.site-header h1{font-size:14px}main{padding:10px 16px}.game-layout{gap:12px}.controls{padding:12px 20px}.intro{margin-bottom:10px}.hint{font-size:12px}}
