.bp-page{max-width:870px;padding-top:1.2rem;padding-bottom:2rem}.bp-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem;gap:1rem}.bp-heading h1{font-size:1.65rem;color:var(--peach);font-weight:normal}.bp-heading .eyebrow{font-size:.65rem}.bp-heading>a{font-size:.75rem;color:var(--lavender)}.bp-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));padding:.75rem 1rem;background:var(--card);border:1px solid var(--line);margin-bottom:1rem;gap:.5rem}.bp-stats span{display:block;font-size:.65rem;color:var(--ink-soft)}.bp-stats strong{font-size:1.1rem;font-weight:normal;font-variant-numeric:tabular-nums;color:var(--peach);overflow-wrap:anywhere}.bp-layout{display:grid;grid-template-columns:340px minmax(0,1fr);gap:1.5rem;align-items:start;justify-content:center}.bp-workspace{min-width:0}.bp-board-top{display:flex;justify-content:space-between;align-items:center;gap:.5rem;font-size:.68rem;color:var(--ink-soft);margin-bottom:.35rem}.bp-board-top button{min-height:44px;padding:.3rem .5rem;color:var(--lavender);text-decoration:underline;text-underline-offset:4px}.bp-board-shell{position:relative;width:min(100%,320px);margin:auto;box-shadow:4px 4px 0 #05070f;border:2px solid var(--lavender-deep)}.bp-board{display:grid;grid-template-rows:repeat(16,1fr);aspect-ratio:10/16;background:#080d20;touch-action:pan-y}.bp-row{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));min-height:0}.bp-cell{position:relative;border:1px solid #26304c;min-width:0;min-height:0;padding:0;background:#10182e;touch-action:pan-y;cursor:crosshair}.bp-cell.filled{background:var(--block);box-shadow:inset 2px 2px 0 #ffffff40,inset -2px -2px 0 #00000040}.bp-cell.preview{background:var(--block);opacity:.68;box-shadow:inset 0 0 0 2px #e8f0ff}.bp-cell.invalid{background:#642339;box-shadow:inset 0 0 0 2px var(--pink)}.bp-cell.origin::after{content:"";position:absolute;inset:1px;border:2px solid #fff3bd;pointer-events:none}.bp-cell .bp-icon{position:absolute;inset:0;display:grid;place-items:center;color:#f6efda;font-size:clamp(12px,2vw,19px);text-shadow:1px 1px #000,-1px -1px #000;pointer-events:none}.bp-cell .bp-icon.reroll{color:#bdfdcd}.bp-cell:focus-visible{outline:3px solid #fff;outline-offset:-3px;z-index:1}.bp-tray{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.6rem;margin-top:1rem}.bp-piece{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.45rem;min-height:96px;padding:.45rem .3rem;border:2px solid var(--line);background:var(--card);touch-action:none;user-select:none;-webkit-user-select:none}.bp-piece[aria-pressed=true]{border-color:var(--peach);background:#242442}.bp-piece:disabled{opacity:.35}.bp-piece-label{font-size:.64rem;color:var(--ink)}.bp-mini{display:grid;gap:2px;--size:10px;grid-auto-columns:var(--size);grid-auto-rows:var(--size);min-height:52px;align-content:center;justify-content:center}.bp-unit{background:var(--block);box-shadow:inset 1px 1px 0 #fff5,inset -1px -1px 0 #0005}.bp-unit.empty{background:transparent;box-shadow:none}.bp-controls{padding-top:.4rem;min-width:0}.bp-status{min-height:3.5em;font-size:.85rem;color:var(--ink);line-height:1.7;margin-bottom:.8rem}.bp-transform{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.4rem}.bp-transform button{min-height:44px;border:1px solid var(--lavender-deep);background:var(--card);padding:.4rem;font-size:.75rem;touch-action:manipulation}.bp-controls button:disabled{opacity:.38;cursor:default}.bp-abilities{padding-top:1rem}.bp-ability-title{display:flex;justify-content:space-between;align-items:center;gap:1rem;font-size:.75rem;margin-bottom:.5rem}.bp-ability-title h2{font-size:.85rem;font-weight:normal}.bp-ability-title>span{color:var(--ink-soft)}.bp-abilities>button{display:flex;justify-content:space-between;align-items:center;min-height:48px;padding:.45rem .7rem;border:1px solid var(--lavender-deep);width:100%;margin-bottom:.5rem;font-size:.78rem;background:var(--card);touch-action:manipulation}.bp-abilities>button[aria-pressed=true]{border-color:var(--peach);background:#242442}.bp-abilities strong{color:var(--mint);font-weight:normal}#bpNextIcon{font-size:.68rem;color:var(--ink-soft);margin-top:.35rem}.bp-input-help,.bp-save{font-size:.68rem;color:var(--ink-soft);line-height:1.85;margin-top:1rem}.bp-save.error{color:var(--pink)}.bp-new{margin-top:1rem;font-size:.72rem;color:var(--ink-soft)}.bp-new summary,.bp-rules summary{min-height:44px;cursor:pointer;display:list-item;list-style:disclosure-closed;padding:.5rem 0;color:var(--lavender)}.bp-new[open] summary,.bp-rules[open] summary{list-style:disclosure-open}.bp-new p{margin:.5rem 0}.bp-new .btn{font-size:.72rem}.bp-rules{margin-top:1.5rem;border-top:1px solid var(--line);font-size:.78rem}.bp-rules ul{list-style:disc;padding-left:1.2rem}.bp-rules li,.bp-rules>p{margin-bottom:.7rem;color:var(--ink-soft);line-height:1.9}.bp-overlay{position:absolute;inset:0;z-index:3;background:#080d20ed;display:grid;place-items:center;padding:1rem;text-align:center}.bp-overlay h2{font-size:1.3rem;color:var(--peach);margin-bottom:.8rem;font-weight:normal}.bp-overlay p{font-size:.78rem;line-height:1.9;margin-bottom:1rem}.bp-overlay button{display:block;margin:.8rem auto;min-height:44px;font-size:.8rem}.bp-drag{position:fixed;z-index:100;pointer-events:none;display:grid;gap:1px;opacity:.9;filter:drop-shadow(3px 3px 0 #0008)}
@media(max-width:700px){.bp-page{padding:.8rem 1rem 2rem;max-width:470px}.bp-layout{grid-template-columns:1fr;gap:.75rem}.bp-heading{margin-bottom:.65rem}.bp-heading h1{font-size:1.35rem}.bp-heading>a{font-size:.64rem}.bp-stats{padding:.5rem .7rem;margin-bottom:.3rem}.bp-stats strong{font-size:.95rem}.bp-stats span{font-size:.59rem}.bp-board-shell{width:min(100%,300px,calc(58dvh * .625))}.bp-board-top{max-width:320px;margin-left:auto;margin-right:auto}.bp-tray{max-width:340px;margin:.7rem auto 0;gap:.5rem}.bp-piece{min-height:84px}.bp-mini{--size:9px;min-height:45px}.bp-controls{padding:0}.bp-status{margin-bottom:.5rem;min-height:1.7em;font-size:.75rem}.bp-abilities{padding-top:.7rem}.bp-abilities>button{min-height:44px}.bp-input-help,.bp-save{margin-top:.6rem}.bp-rules{margin-top:1rem}}
@media(prefers-reduced-motion:reduce){.bp-page *{animation:none!important;transition:none!important}}

/* Clear feedback is a bounded overlay; the saved game already contains the final result. */
.bp-clear-fx{position:absolute;inset:0;z-index:2;pointer-events:none;overflow:hidden;contain:layout paint}.bp-clear-line{position:absolute;left:0;right:0;display:grid;grid-template-columns:repeat(10,1fr);gap:1px}.bp-clear-block{background:var(--block);box-shadow:inset 2px 2px #ffffff60,inset -2px -2px #0005;animation:bp-clear-break 390ms ease-out both}.bp-clear-line::after{content:"";position:absolute;inset:0;background:#fff2c7;animation:bp-clear-flash 180ms ease-out both}.bp-clear-shard{position:absolute;top:35%;width:7px;height:7px;background:var(--block);animation:bp-clear-scatter 400ms 90ms ease-out both}.bp-clear-score{position:absolute;left:50%;white-space:nowrap;padding:.35rem .55rem;border:1px solid #fff0b0;background:#11172eea;color:#fff0b0;font-size:.85rem;text-shadow:1px 1px #000;animation:bp-clear-points 480ms ease-out both}.bp-clear-fx.multi .bp-clear-score{font-size:1rem;border-width:2px}.bp-clear-fx.multi .bp-clear-line::after{background:#fff5a9}.bp-clear-fx.reduced .bp-clear-shard{display:none}.bp-clear-fx.reduced .bp-clear-score{transform:translateX(-50%)}
@keyframes bp-clear-flash{0%{opacity:.9}100%{opacity:0}}@keyframes bp-clear-break{0%,20%{opacity:1;transform:scale(1)}40%{opacity:1;transform:scale(1.13)}100%{opacity:0;transform:scale(.55)}}@keyframes bp-clear-scatter{0%{opacity:0;transform:translate(0,0)}15%{opacity:.9}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--turn)) scale(.3)}}@keyframes bp-clear-points{0%{opacity:0;transform:translate(-50%,8px) scale(.9)}20%,65%{opacity:1;transform:translate(-50%,-6px) scale(1)}100%{opacity:0;transform:translate(-50%,-20px) scale(1)}}
@media(prefers-reduced-motion:reduce){.bp-clear-fx *{animation:none!important}.bp-clear-block{opacity:.55}.bp-clear-line::after{opacity:.2}.bp-clear-score{transform:translateX(-50%)}}
