*{box-sizing:border-box}html,body{height:100%;overflow:hidden}body{margin:0;background:#191a18;color:#f4f5f1;font:14px system-ui,sans-serif;display:flex;flex-direction:column}header{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid #ffffff18;flex-wrap:wrap}.identity{margin-right:auto}h1{font-size:16px;margin:0 0 3px}.identity span{font-size:10px;color:#aeb7c5}button{font:inherit;background:#ffffff09;color:inherit;border:1px solid #ffffff25;border-radius:9px;padding:7px 10px;touch-action:manipulation}button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid #b7c0ff;outline-offset:2px}button:disabled{opacity:.4}#hearts{color:#ff809c;white-space:nowrap}nav{display:flex;gap:5px}#level{font-size:12px;white-space:nowrap}#viewport{flex:1;min-height:0;position:relative;overflow:hidden;touch-action:manipulation;user-select:none}svg{width:100%;height:100%;display:block}path.arrow{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:.08}path.hit{fill:none;stroke:transparent;stroke-width:.8;cursor:pointer;pointer-events:stroke}#status{font-size:11px;color:#bbc1c9;text-align:center;padding:7px;min-height:28px}dialog{background:#202321;color:#fff;border:1px solid #ffffff30;border-radius:18px;width:min(360px,calc(100% - 24px));max-height:90%;padding:22px;text-align:center}dialog::backdrop{background:#0009;backdrop-filter:blur(8px)}dialog h2{margin:0 0 12px;font-size:22px}dialog p{color:#bbc1c9;line-height:1.5;font-size:12px}dialog button{margin:5px}textarea,input{font:16px system-ui;color:#f3f5fa;background:#ffffff08;border:1px solid #ffffff29;border-radius:9px;padding:10px;max-width:100%}textarea{width:100%;resize:none;font-size:16px}#nameGate{position:absolute;inset:0;display:grid;place-items:center;background:#191a18;z-index:2;padding:16px}#nameGate[hidden]{display:none}#nameForm{width:min(280px,100%);text-align:center}#nameForm h2{font-size:22px;margin:0 0 8px}#nameForm p{font-size:12px;color:#aeb7c5;line-height:1.5}#nickname{width:100%;margin:10px 0}#join{width:100%;background:#b8c6ff;color:#151b2c;font-weight:700}#nameStatus{min-height:18px;color:#ff9bb7!important}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}@media(max-width:540px){header{padding:7px;gap:6px}h1{font-size:13px}.identity span{font-size:9px}nav button{padding:6px 8px}#level,#hearts{font-size:11px}#status{font-size:10px;padding:5px}}@media(max-width:340px){header{gap:4px}nav{gap:3px}nav button{padding:5px 6px}.identity span{max-width:95px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}

/* Keep game controls visually stable while input is locked for movement. */
nav button{opacity:1;animation:none;transition:none;min-width:32px}nav button[aria-disabled="true"]{cursor:wait}header{gap:8px}@media(max-width:540px){header{gap:5px}.identity{flex:1;min-width:80px}nav{flex-shrink:0}}

.level-hearts{display:flex;flex-direction:column;align-items:center;gap:2px;line-height:1.1;white-space:nowrap}
#nameForm{box-sizing:border-box;width:min(280px,100%);padding:20px;background:#20242bee;border:1px solid #ffffff22;border-radius:20px;text-align:center;box-shadow:0 12px 40px #0003}#nameForm h2{font:700 18px/1.2 system-ui;margin:0}#nameForm p{font:11px/1.5 system-ui;margin:6px 0;color:#bcc4d2}#nameForm #nickname{box-sizing:border-box;width:100%;margin:8px 0 0;padding:12px;border:1px solid #ffffff30;border-radius:12px;font:16px/1.25 system-ui;color:#f4f6fa;background:#ffffff0a}#nameForm #join{width:100%;margin-top:10px;padding:12px;border:0;border-radius:12px;background:#3554ed;color:#fff;font:700 14px system-ui;box-shadow:0 4px 0 #2038b8}#nameStatus:empty{display:none}

/* Equal side columns keep the current level and hearts centered. */
header{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);flex-wrap:nowrap}
header .identity{min-width:0;margin:0}
header .identity h1,header .identity span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
header .level-hearts{grid-column:2;justify-self:center}
header nav{grid-column:3;justify-self:end}

/* Dense original paths stay crisp; zoom keeps small-board targets accessible. */
path.arrow{stroke-width:.13}path.hit{stroke-width:.85}#board{touch-action:none}#clock{font-size:10px;color:#abb7d2;font-variant-numeric:tabular-nums}.zoom-tools{position:absolute;bottom:8px;right:8px;display:flex;gap:3px;background:#191a18df;border-radius:10px;padding:3px}.zoom-tools button{font-size:12px;min-height:32px;min-width:32px;padding:5px}.zoom-tools button:active{background:#b8c6ff33}

/* Zoom stays above the puzzle, never over a selectable path. */
.board-surface{position:absolute;inset:44px 0 0}.board-surface #gridDots{position:absolute;inset:0;pointer-events:none}.board-surface #board{position:relative}.zoom-tools{top:6px;bottom:auto;right:8px;z-index:1}
#celebration{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:5}#celebration[hidden]{display:none}#celebration i{position:absolute;left:50%;top:55%;width:7px;height:12px;background:var(--color);border-radius:2px;animation:arrow-celebration 1.4s cubic-bezier(.18,.65,.4,1) both;will-change:transform,opacity}#celebration i:nth-child(3n){border-radius:50%;width:8px;height:8px}@keyframes arrow-celebration{0%{transform:translate(0,0) rotate(0);opacity:0}8%{opacity:1}45%{transform:translate(calc(var(--x)*.75),var(--y)) rotate(calc(var(--spin)*.45));opacity:1}100%{transform:translate(var(--x),var(--fall)) rotate(var(--spin));opacity:0}}@media(prefers-reduced-motion:reduce){#celebration{display:none}}
