/* Coral and cyan are ownership; lime is earned progress. Effects never intercept input. */
#board .cell{--owner:var(--x)}#board .cell.owner-o{--owner:var(--o)}
#board .cell.locked{border:1px solid color-mix(in srgb,var(--owner) 65%,#29333a);box-shadow:inset 0 0 0 2px #ffffff07,inset 0 0 22px color-mix(in srgb,var(--owner) 12%,transparent)}
#board .lock-plate{overflow:hidden;isolation:isolate}
.lock-mark{position:relative;z-index:1}.lock-shine{position:absolute;inset:-35% -75%;background:linear-gradient(110deg,transparent 35%,#ffffffb3 48%,#fff4 54%,transparent 66%);opacity:0;pointer-events:none;transform:translateX(-70%)}
.lock-frame{position:absolute;inset:-2%;height:104%;width:104%;overflow:visible;z-index:15;pointer-events:none;color:var(--owner)}
.lock-frame rect{fill:none;stroke:currentColor;stroke-width:2.2;stroke-dasharray:1;stroke-dashoffset:1;opacity:0;filter:drop-shadow(0 0 3px currentColor)}
.lock-clamps{position:absolute;inset:0;pointer-events:none;z-index:10;color:var(--owner)}
.lock-clamps i{position:absolute;width:11%;height:11%;border:2px solid currentColor;opacity:0;border-radius:2px}
.lock-clamps i:nth-child(1){top:8%;left:8%;border-right:0;border-bottom:0}.lock-clamps i:nth-child(2){top:8%;right:8%;border-left:0;border-bottom:0}.lock-clamps i:nth-child(3){bottom:11%;right:8%;border-left:0;border-top:0}.lock-clamps i:nth-child(4){bottom:11%;left:8%;border-right:0;border-top:0}
#board .locked .lock-clamps i{opacity:.65}
.ownership-wash{position:absolute;inset:2px;border-radius:inherit;background:var(--owner);opacity:0;z-index:0;pointer-events:none}
.win-lines path{filter:drop-shadow(0 0 4px currentColor);stroke-linecap:round}
.opponent-arrival{display:flex;align-items:center;gap:12px;padding:13px 16px;margin:-3px 0 12px;border:1px solid #d9ee9a66;border-radius:14px;background:linear-gradient(110deg,#d9ee9a14,#15212a);pointer-events:none}
.opponent-arrival>span{font-size:21px;color:var(--accent);letter-spacing:-.15em;min-width:36px}.opponent-arrival small{display:block;font-size:9px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}.opponent-arrival strong{font-size:15px;letter-spacing:-.02em}.streak-difficulty[data-tier=casual]{border:1px solid #73cddb66}.streak-difficulty[data-tier=skilled]{border:1px solid #bfa5f180}.streak-difficulty[data-tier=apex]{border:1px solid #d9ee9a99;color:var(--accent)}
.next-opponent{margin:13px 0 17px;padding:12px;border:1px solid #d9ee9a44;border-radius:12px;background:#d9ee9a08;color:var(--text);font-size:12px}.next-opponent small{display:block;margin-top:4px;color:var(--muted);font-size:11px}
body.ad-pending #game,body.ad-pending #resultDialog{pointer-events:none}body.ad-pending #rematch{opacity:.65}
.privacy-options{background:none;color:var(--muted);font-size:inherit;padding:0;text-decoration:underline}
@media(max-width:640px){.opponent-arrival{padding:10px 12px}.opponent-arrival strong{font-size:13px}.lock-clamps i{border-width:1.5px}}
@media(prefers-reduced-motion:reduce){.lock-frame rect{filter:none}.win-lines path{filter:none}}

.streak-bar{position:relative}.opponent-arrival{position:absolute;inset:0;margin:0;z-index:2;background:linear-gradient(110deg,#303d28,#15212a)}
.streak-bar>.opponent-arrival{align-items:center;gap:12px}.streak-bar.announcing>div:not(.opponent-arrival),.streak-bar.announcing>.streak-difficulty{visibility:hidden}
