@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/play/pipe-link/assets/nunito-cyrillic-ext-600-normal-CWPPjBOD.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-cyrillic-ext-600-normal-vnfu4DTE.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/play/pipe-link/assets/nunito-cyrillic-600-normal-DJGQ2h05.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-cyrillic-600-normal-BUjmtIuu.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/play/pipe-link/assets/nunito-vietnamese-600-normal-BY8O6Cug.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-vietnamese-600-normal-DO1RqFw5.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/play/pipe-link/assets/nunito-latin-ext-600-normal-Dd9Zuxh1.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-latin-ext-600-normal-BKUpuB78.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/play/pipe-link/assets/nunito-latin-600-normal-Br8yIETf.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-latin-600-normal-Cd0eNu1l.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/play/pipe-link/assets/nunito-cyrillic-ext-800-normal-B-cvGohL.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-cyrillic-ext-800-normal-pjRatrRO.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/play/pipe-link/assets/nunito-cyrillic-800-normal-D3igD7Kl.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-cyrillic-800-normal-DymMgApb.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/play/pipe-link/assets/nunito-vietnamese-800-normal-D_CZYdm9.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-vietnamese-800-normal-Dz0hZPb5.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/play/pipe-link/assets/nunito-latin-ext-800-normal-CtU8tJOV.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-latin-ext-800-normal-CDcxIxx8.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/play/pipe-link/assets/nunito-latin-800-normal-Dz8SOQK_.woff2) format("woff2"),url(/play/pipe-link/assets/nunito-latin-800-normal-D-J0wlBY.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg: #0e1326;--bg-glow: #161d3a;--board: #171d36;--grid-line: #262e4d;--text: #eaf2ff;--text-dim: #9fb3c8;--accent: #f5b942;--accent-ink: #2a1d00;--button: #1c2342;--button-line: #2a3356;--board-radius: 16px;--grid-line-w: 1px;--board-border-w: 2px;--dot-size: .64;--dot-ring-gap: .06;--dot-ring-w: 2px;--dot-ink: #ffffff;--dot-shine-alpha: .35;--pipe-w: .4;--pipe-tint-alpha: .28;--pipe-drawing-brightness: 1.25;--symbol-alpha: .85;--symbol-size: .45;--board-margin: 16px;--hud-h: 96px;--controls-h: 72px;--pipe-red: #ff4d5a;--pipe-orange: #ff8c42;--pipe-yellow: #ffd23f;--pipe-lime: #a3e635;--pipe-green: #22c55e;--pipe-teal: #2dd4bf;--pipe-sky: #38bdf8;--pipe-blue: #3b82f6;--pipe-violet: #8b5cf6;--pipe-pink: #f472b6;--pipe-brown: #a16207;--pipe-grey: #cbd5e1;font-family:Nunito,system-ui,sans-serif;font-weight:600;color:var(--text);color-scheme:dark;-webkit-tap-highlight-color:transparent}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:radial-gradient(90% 60% at 50% 45%,var(--bg-glow) 0%,var(--bg) 70%) fixed;overflow:hidden;user-select:none;-webkit-user-select:none;touch-action:manipulation}.screen{height:100%;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}.home{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px}.home-mark{width:96px;height:96px}.home-title{margin:0;font-size:40px;font-weight:800}.home-version{position:absolute;right:calc(16px + env(safe-area-inset-right));bottom:calc(12px + env(safe-area-inset-bottom));margin:0;font-size:12px;color:var(--text-dim)}.button{min-height:48px;border:1px solid var(--button-line);border-radius:999px;background:var(--button);color:var(--text);font:inherit;font-size:16px;cursor:pointer}.button:disabled{opacity:.45;cursor:default}.button:active:not(:disabled){transform:scale(.96)}.button.pill{padding:0 22px}.button.primary{border-color:var(--accent);background:var(--accent);color:var(--accent-ink);font-weight:800}.button.icon,.icon-spacer{width:48px;font-size:28px;line-height:1}.game{display:flex;flex-direction:column}.hud{min-height:var(--hud-h);padding:8px var(--board-margin) 4px}.hud-row{display:flex;align-items:center;justify-content:space-between}.level-name{margin:0;font-size:22px;font-weight:800}.counters{display:flex;justify-content:space-around;margin:4px 0 0}.counters div{display:flex;flex-direction:column;align-items:center}.counters dt{font-size:12px;color:var(--text-dim)}.counters dd{margin:0;font-size:18px;font-weight:800}.board-area{flex:1;min-height:0;margin:0 var(--board-margin);display:flex;align-items:center;justify-content:center}.board{position:relative;border:var(--board-border-w) solid var(--grid-line);border-radius:var(--board-radius);background:var(--board);overflow:hidden}.board svg{display:block;width:100%;height:100%;touch-action:none}.board .tint{fill-opacity:var(--pipe-tint-alpha)}.board .grid-lines line{stroke:var(--grid-line);stroke-width:var(--grid-line-w);vector-effect:non-scaling-stroke}.board .pipe{fill:none;stroke-width:calc(var(--pipe-w) * 100px);stroke-linecap:round;stroke-linejoin:round}.board .pipe.drawing{filter:brightness(var(--pipe-drawing-brightness))}.board .dot-fill{r:calc(var(--dot-size) * 50px);fill:var(--dot-colour)}.board .dot-shine{cx:calc(var(--dot-size) * -14px);cy:calc(var(--dot-size) * -14px);r:calc(var(--dot-size) * 14px);fill:var(--dot-ink);fill-opacity:var(--dot-shine-alpha)}.board .dot-ring{r:calc((var(--dot-size) / 2 + var(--dot-ring-gap)) * 100px);fill:none;stroke:var(--dot-colour);stroke-width:var(--dot-ring-w);vector-effect:non-scaling-stroke;visibility:hidden}.board .dot.complete .dot-ring{visibility:visible}.board .dot-symbol{fill:var(--dot-ink);fill-opacity:var(--symbol-alpha);font-size:calc(var(--dot-size) * var(--symbol-size) * 100px);font-weight:800;pointer-events:none}.controls{min-height:var(--controls-h);padding:8px var(--board-margin) 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px}.controls-row{display:flex;gap:12px}.solved-line{margin:0;color:var(--accent);font-size:18px;font-weight:800}:root{--control: 48px;--space-xs: 4px;--space-sm: 8px;--space-md: 12px;--space: 16px;--space-lg: 24px;--radius: 20px;--sheet-radius: 28px;--content-width: 480px;--font-small: 12px;--font-body: 16px;--font-counter: 22px;--font-title: 28px;--tile-height: 64px;--preview-size: 64px;--flag-width: 36px;--flag-height: 24px;--play-width: 200px;--scrim: #040a14b3;--focus-width: 2px}.app{height:100%;max-width:var(--content-width);margin:auto}.button{min-width:var(--control);min-height:var(--control)}.button:focus-visible{outline:var(--focus-width) solid var(--accent);outline-offset:var(--space-xs)}.home-settings{position:absolute;top:calc(var(--space) + env(safe-area-inset-top));right:calc(var(--space) + env(safe-area-inset-right))}.home-heading{text-align:center}.home-heading p,.progress-line{color:var(--text-dim);font-size:var(--font-small);text-align:center;margin:var(--space-sm) 0}.play{min-width:var(--play-width);padding:var(--space-sm) var(--space-lg);font-size:var(--font-counter)}.play small{display:block;font-size:var(--font-small)}.collection{overflow-y:auto;padding-inline:max(var(--space),env(safe-area-inset-left)) max(var(--space),env(safe-area-inset-right))}.page-heading,.pack-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding-block:var(--space-md)}.page-heading h1,.pack-heading h2{margin:0;font-size:var(--font-title)}.pack-list{display:grid;gap:var(--space-md);padding-bottom:var(--space)}.pack-card{display:flex;align-items:center;text-align:left;gap:var(--space-md);border-radius:var(--radius);padding:var(--space-md)}.pack-card>span:nth-child(2){flex:1}.pack-card strong{display:block;font-size:var(--font-title)}.pack-card small{display:block;font-size:var(--font-small);color:var(--text-dim)}.preview{width:var(--preview-size);height:var(--preview-size);flex-shrink:0;border-radius:var(--space-sm);background:var(--board)}.preview rect{fill:currentColor;fill-opacity:var(--pipe-tint-alpha)}.preview polyline{fill:none;stroke:currentColor;stroke-width:var(--pipe-w);stroke-linecap:round;stroke-linejoin:round}.level-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--space-sm);padding:var(--space-xs)}.level-tile{height:var(--tile-height);min-width:0;border-radius:var(--space-md);display:flex;flex-direction:column;justify-content:center;align-items:center}.level-tile strong{font-size:var(--font-counter)}.level-tile small{font-size:var(--font-small)}.level-tile.solved{border-color:var(--accent)}.level-tile.perfect{background:var(--accent);color:var(--accent-ink)}.level-tile.current{outline:var(--focus-width) solid var(--text);outline-offset:var(--space-xs)}.counters dd small{font-size:var(--font-small);color:var(--text-dim)}.controls-row{width:100%;gap:var(--space-sm)}.controls-row .button{flex:1;padding-inline:var(--space-xs)}.sheet{position:fixed;inset:auto 0 0;width:min(100%,var(--content-width));max-height:calc(100dvh - env(safe-area-inset-top) - var(--space));overflow-y:auto;margin:auto auto 0;padding:var(--space-lg) var(--space) calc(var(--space-lg) + env(safe-area-inset-bottom));border:var(--grid-line-w) solid var(--button-line);border-radius:var(--sheet-radius) var(--sheet-radius) 0 0;background:var(--bg);color:var(--text)}.sheet[open]{display:flex;flex-direction:column;gap:var(--space-md)}.sheet::backdrop{background:var(--scrim)}.sheet-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.sheet h2{margin:0;font-size:var(--font-counter)}.sheet p{margin:0;color:var(--text-dim)}.languages{display:flex;gap:var(--space-sm)}.language{display:flex;flex:1;justify-content:center;align-items:center;gap:var(--space-sm);padding:var(--space-sm)}.language img{width:var(--flag-width);height:var(--flag-height);object-fit:cover;border-radius:var(--space-xs)}.language.chosen{border-color:var(--accent);color:var(--accent)}.setting{display:flex;align-items:center;justify-content:space-between;min-height:var(--control);gap:var(--space)}.setting input{width:var(--control);height:var(--control);margin:0;accent-color:var(--accent)}.scores{display:flex;flex-direction:column;align-items:center;gap:var(--space-xs)}.scores strong{font-size:var(--font-title)}.sheet .badge{color:var(--accent);text-align:center;font-weight:800}.level-navigation{display:flex;align-items:center;gap:var(--space-xs)}.level-navigation .level-name{font-size:var(--font-body);white-space:nowrap}:root{--ease-out: cubic-bezier(.2, .8, .2, 1);--ease-pop: cubic-bezier(.3, 1.6, .5, 1);--pulse-ms: .22s;--flash-ms: .36s;--cut-flash-ms: .2s;--screen-ms: .2s;--sheet-ms: .26s;--bloom-ms: .48s;--glint-ms: .42s;--dim-ms: .32s;--tile-gap-ms: 12ms;--glint-colour: #ffffff}.board .tint{animation:pl-fade-in .12s ease-out backwards}.board .pipe.grow{animation:pl-grow var(--grow-ms) linear}.board .pipe.pulse{animation:pl-pulse var(--pulse-ms) ease-out}.board .pipe.grow.pulse{animation:pl-grow var(--grow-ms) linear,pl-pulse var(--pulse-ms) ease-out}.board .pipe-glint{fill:none;stroke:var(--glint-colour);stroke-width:calc(var(--pipe-w) * 40px);stroke-linecap:round;stroke-dasharray:.2 1.4;stroke-dashoffset:-1.2;opacity:.7;pointer-events:none;animation:pl-glint var(--glint-ms) ease-in-out}.board .ghost{animation:pl-fade-out var(--retract-ms) ease-in forwards;pointer-events:none}.board .ghost .pipe{stroke-dasharray:1 1;animation:pl-retract var(--retract-ms) ease-in forwards}.board .cut-flash{fill:var(--glint-colour);opacity:0;pointer-events:none;animation:pl-cut-flash var(--cut-flash-ms) ease-out}.board .pipe-flash{fill:none;stroke:var(--glint-colour);stroke-width:calc(var(--pipe-w) * 100px);stroke-linecap:round;stroke-linejoin:round;opacity:0;pointer-events:none;animation:pl-flash var(--flash-ms) ease-out backwards}.board .dot{transform-box:view-box}.board .dot-fill{transition:transform .12s var(--ease-out)}.board .dot.lit .dot-fill{transform:scale(1.12)}.board .dot.dim{animation:pl-dim var(--dim-ms) ease-out}.board .dot.pop{animation:pl-pop .26s var(--ease-pop) backwards;animation-delay:calc(var(--i) * var(--pop-gap))}.board .dot-bloom{r:calc((var(--dot-size) / 2 + var(--dot-ring-gap)) * 100px);fill:none;stroke:var(--dot-colour);stroke-width:calc(var(--dot-size) * 8px);opacity:0;animation:pl-bloom var(--bloom-ms) ease-out}@keyframes pl-grow{0%{stroke-dashoffset:var(--grow)}to{stroke-dashoffset:0}}@keyframes pl-retract{0%{stroke-dashoffset:0}to{stroke-dashoffset:1}}@keyframes pl-pulse{40%{stroke-width:calc(var(--pipe-w) * 150px)}}@keyframes pl-glint{0%{stroke-dashoffset:.2}to{stroke-dashoffset:-1.2}}@keyframes pl-flash{0%{opacity:0}30%{opacity:.6}to{opacity:0}}@keyframes pl-bloom{0%{opacity:.9;transform:scale(1)}to{opacity:0;transform:scale(1.9)}}@keyframes pl-cut-flash{0%{opacity:.35}to{opacity:0}}@keyframes pl-dim{30%{opacity:.4}}@keyframes pl-pop{0%{opacity:0;transform:scale(.3)}}@keyframes pl-fade-in{0%{opacity:0}}@keyframes pl-fade-out{to{opacity:0}}.button{transition:transform 90ms ease-out}.screen{animation:pl-screen-in var(--screen-ms) var(--ease-out) backwards}.sheet[open]{animation:pl-sheet-in var(--sheet-ms) var(--ease-out)}.sheet[open]::backdrop{animation:pl-fade-in var(--sheet-ms) ease-out}@keyframes pl-screen-in{0%{opacity:0;transform:translateY(12px)}}@keyframes pl-sheet-in{0%{transform:translateY(100%)}}.counters dd{animation:pl-tick .18s var(--ease-out)}@keyframes pl-tick{0%{opacity:.4;transform:translateY(-4px)}}.perfect-badge{position:relative;animation:pl-pop .42s var(--ease-pop) .22s backwards}.perfect-badge:after{content:"";position:absolute;left:50%;top:50%;width:var(--control);height:var(--control);margin:calc(var(--control) / -2);border:var(--focus-width) solid var(--accent);border-radius:50%;opacity:0;pointer-events:none;animation:pl-burst .52s ease-out .32s}@keyframes pl-burst{0%{opacity:1;transform:scale(.4)}to{opacity:0;transform:scale(3)}}.level-tile{animation:pl-pop .24s var(--ease-pop) backwards;animation-delay:calc(var(--i) * var(--tile-gap-ms))}.level-tile small{display:inline-block}.level-tile.just-solved small{animation:pl-pop .42s var(--ease-pop) .42s backwards}.home-mark .mark-pipe{stroke-dasharray:1 1;animation:pl-draw 3.6s ease-in-out infinite}.home-mark .mark-dot{transform-box:fill-box;transform-origin:center;animation:pl-breathe 3.6s ease-in-out infinite}.home-mark .mark-dot.end{animation-delay:1.4s}.home-mark .mark-ring{transform-box:fill-box;transform-origin:center;animation:pl-ring 3.6s ease-in-out infinite}@keyframes pl-ring{0%,35%{opacity:0;transform:scale(.6)}45%,70%{opacity:1;transform:scale(1)}90%,to{opacity:0;transform:scale(1)}}@keyframes pl-draw{0%{stroke-dashoffset:1}40%,70%{stroke-dashoffset:0}to{stroke-dashoffset:-1}}@keyframes pl-breathe{0%,to{transform:scale(1)}20%{transform:scale(1.12)}}.reduce-motion *,.reduce-motion *:before,.reduce-motion *:after,.reduce-motion ::backdrop{animation:none!important;transition:none!important}.home-mark .mark-board{fill:var(--board)}.home-mark .mark-grid{stroke:var(--grid-line);stroke-width:1.5}.home-mark .mark-pipe{fill:none;stroke:var(--accent);stroke-width:8;stroke-linecap:round;stroke-linejoin:round}.home-mark .mark-dot{fill:var(--accent)}.home-mark .mark-ring{fill:none;stroke:var(--accent);stroke-width:1.5}
