.online-shell{width:min(760px,100%);margin:0 auto;padding:18px 12px 32px}.online-brand{display:flex;align-items:center;gap:12px;margin:8px 4px 16px}.online-brand img{width:62px;height:62px;object-fit:contain}.online-brand p,.online-topbar p{margin:0;color:var(--muted);font-size:.72rem;font-weight:900;letter-spacing:.12em}.online-brand h1,.online-topbar h1{margin:2px 0 0;font-size:1.45rem;line-height:1.15}.online-lead{margin:0 4px 20px;line-height:1.7;font-weight:700;color:#4e493d}.online-modes{display:grid;gap:14px}.mode-block{padding:14px;border:2px solid var(--ink);border-radius:20px;background:rgba(255,255,255,.82);box-shadow:var(--shadow)}.mode-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.mode-head h2{margin:0;font-size:1.12rem}.mode-head small{color:var(--muted);font-weight:800}.puzzle-picks{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}.puzzle-pick{min-height:72px;border:var(--line);border-radius:14px;background:var(--paper);color:var(--ink);font:inherit;font-weight:900;padding:8px 4px}.puzzle-pick b{display:block;font-size:1.15rem}.puzzle-pick small{display:block;margin-top:5px;min-height:16px;color:#d39b00;letter-spacing:-.05em}.puzzle-pick:active{transform:scale(.97)}.online-note{margin:18px 6px 0;color:var(--muted);font-size:.78rem;line-height:1.6}.online-game{padding-bottom:24px}.online-topbar{display:grid;grid-template-columns:46px 1fr 68px;align-items:center;gap:10px;margin-bottom:10px}.icon-button{width:44px;height:44px;border:var(--line);border-radius:14px;background:#fff;font-size:1.4rem;font-weight:900}.best-box{height:58px;border-radius:15px;background:#8f9190;color:white;display:flex;flex-direction:column;align-items:center;justify-content:center}.best-box b{font-size:1.45rem;line-height:1}.best-box small{font-size:.58rem;letter-spacing:.12em;margin-top:3px}.online-stats{display:flex;justify-content:space-between;gap:8px;margin-bottom:8px}.online-stats span{flex:1;padding:9px 10px;border-radius:12px;background:rgba(255,255,255,.8);border:var(--line);font-size:.8rem;font-weight:900;text-align:center}.online-instruction{min-height:48px;display:grid;place-items:center;padding:9px 14px;margin-bottom:8px;border-radius:14px;background:#171612;color:white;font-size:.86rem;font-weight:800;line-height:1.45;text-align:center}.online-board{position:relative;width:100%;aspect-ratio:1/1;height:auto;overflow:hidden;border:2px solid var(--ink);border-radius:22px;background:var(--paper);box-shadow:var(--shadow);touch-action:none;overscroll-behavior:contain;cursor:grab}.online-board svg{position:absolute;left:0;top:0;display:block;max-width:none;max-height:none;overflow:visible;transform-origin:0 0;will-change:transform;user-select:none;-webkit-user-select:none}.online-board:active{cursor:grabbing}.online-board.is-cat-animating{pointer-events:none}.hex-grid{pointer-events:none}.hex-grid-cell{fill:none;stroke:#8f8873;stroke-width:2.2;opacity:.16;vector-effect:non-scaling-stroke}.tile-hex{stroke:#171612;stroke-width:6}.tile-action-outline{opacity:0;fill:none;stroke:#f2c230;stroke-width:13;pointer-events:none}.online-tile.is-operable .tile-action-outline{opacity:1}.online-tile.is-operable .tile-hex{stroke:#c99f00;stroke-width:9}.online-tile.is-move-operable{cursor:grab;touch-action:none}.online-tile.is-move-operable.is-dragging{cursor:grabbing;opacity:.93}.online-tile.is-rotate-operable{cursor:pointer;touch-action:manipulation}.road-shadow{stroke:#6d6655;stroke-width:38;stroke-linecap:round;opacity:.34}.road{stroke:#fffdf4;stroke-width:27;stroke-linecap:round}.tile-code{font-size:34px;font-weight:1000;fill:#171612;text-anchor:middle;dominant-baseline:middle}.tile-mode-mark{font-size:28px;font-weight:1000;fill:#171612;text-anchor:middle}.special-node{cursor:pointer}.special-hit{fill:transparent}.special-ring{fill:#fff;stroke:#8e8772;stroke-width:5}.special-node.is-reachable .special-ring{stroke:#f2c230;stroke-width:11}.special-node.is-reachable .special-hit{fill:rgba(242,194,48,.10)}.special-node.is-current .special-ring{stroke:#171612;stroke-width:9}.special-node.is-disabled{opacity:.35}.special-icon{font-size:34px;text-anchor:middle;dominant-baseline:central;pointer-events:none}.yarn-core{stroke-width:8;fill:#fff}.cat-token{pointer-events:none}.online-rotate-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}.online-rotate-actions button,.online-controls button,.online-clear-card button{min-height:48px;border:1.5px solid var(--ink);border-radius:14px;background:#fff;color:var(--ink);font:inherit;font-weight:900}.online-rotate-actions button{background:#f6d94d}.online-controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}.online-controls button:disabled{opacity:.38}.online-legend{display:flex;flex-wrap:wrap;gap:8px 14px;margin:14px 4px 0;color:var(--muted);font-size:.72rem;font-weight:800}.legend-glow{display:inline-block;width:12px;height:12px;border-radius:50%;border:3px solid #f2c230;box-shadow:0 0 6px #f2c230;vertical-align:-2px}.online-clear{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:20px;background:rgba(23,22,18,.58);backdrop-filter:blur(4px)}.online-clear[hidden]{display:none}.online-clear-card{width:min(420px,100%);padding:26px 20px;border-radius:24px;background:var(--paper);border:3px solid var(--ink);box-shadow:0 24px 70px rgba(0,0,0,.3);text-align:center}.online-clear-card p{margin:0;font-size:.75rem;font-weight:1000;letter-spacing:.14em}.online-clear-card h2{margin:10px 0 4px;color:#d39b00;font-size:2.3rem;letter-spacing:.04em}.online-clear-card strong{display:block;margin-bottom:18px}.online-clear-card div{display:grid;grid-template-columns:1fr 1fr;gap:8px}.online-clear-card button:first-child{background:#f6d94d}@media(max-width:430px){.online-shell{padding:12px 8px 26px}.online-brand h1{font-size:1.25rem}.mode-block{padding:11px}.puzzle-picks{gap:5px}.puzzle-pick{min-height:64px;border-radius:11px;font-size:.8rem}.online-topbar{grid-template-columns:42px 1fr 62px}.online-topbar h1{font-size:1.15rem}.online-board{border-radius:16px}.online-instruction{font-size:.8rem}}
@media(max-width:430px){.online-board svg{touch-action:none}}
.tile-hex{stroke-width:1.5}.online-tile.is-operable .tile-hex{stroke-width:2}.tile-action-outline{stroke-width:6}.special-ring{fill:none;stroke:transparent;stroke-width:3;pointer-events:none}.special-node.is-reachable .special-ring{stroke:#f2c230;stroke-width:4}.special-node.is-current .special-ring{stroke:#204988;stroke-width:4}.special-node.is-disabled{opacity:1}.special-node:focus-visible{outline:none}.special-node:focus-visible .special-ring{stroke:#204988;stroke-width:5}.tile-art{user-select:none;-webkit-user-select:none}
/* Reachable-node rings are intentionally hidden for the current playtest.
   Keep the SVG hit areas and state classes so the hint can be restored later via CSS only. */
.special-node .special-ring{opacity:0}
.special-node .special-hit{fill:transparent}
/* Only currently reachable yarn/key/treasure markers own pointer input.
   Unreachable markers are visual artwork only, so tile drag/rotate can pass through them. */
.special-node:not(.is-reachable),
.special-node:not(.is-reachable) *{pointer-events:none}
.special-node:focus-visible .special-ring{opacity:1;stroke:#204988;stroke-width:5}
