*{box-sizing:border-box;margin:0;padding:0}html,body{min-height:100%;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;overscroll-behavior:none;touch-action:manipulation}#app{min-height:100%;display:flex;align-items:flex-start;justify-content:center;padding:16px}.game{width:min(94vw,480px);display:flex;flex-direction:column;gap:12px;--tube-edge: rgba(24, 18, 12, .34);--tube-body: #d7cdbf;--tube-gloss: rgba(255, 255, 255, .62);--liquid: #17b3dd;--liquid-lite: #8ceaff;--liquid-glow: #37d2ff;--src-a: #6fd07a;--src-b: #3f9a54;--out-a: #f2b25c;--out-b: #cf7a2f;--panel-a: #c7b8a9;--panel-b: #b3a293;--panel-line: rgba(255, 255, 255, .16);--socket: #d9cec1;--socket-shadow: rgba(40, 30, 22, .28)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .game{--tube-edge: rgba(0, 0, 0, .55);--tube-body: #94897a;--tube-gloss: rgba(255, 255, 255, .42);--panel-a: #574c41;--panel-b: #443a30;--panel-line: rgba(255, 255, 255, .08);--socket: #5a4f44;--socket-shadow: rgba(0, 0, 0, .5)}}:root[data-theme=dark] .game{--tube-edge: rgba(0, 0, 0, .55);--tube-body: #94897a;--tube-gloss: rgba(255, 255, 255, .42);--panel-a: #574c41;--panel-b: #443a30;--panel-line: rgba(255, 255, 255, .08);--socket: #5a4f44;--socket-shadow: rgba(0, 0, 0, .5)}.crumb{font-size:14px}.crumb a{color:var(--accent);text-decoration:none;font-weight:700}.crumb a:hover{text-decoration:underline}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.title{font-size:clamp(30px,8.5vw,44px);font-weight:800;line-height:1;letter-spacing:-1px}.sizes{display:flex;gap:8px}.size{flex:1;background:var(--surface);color:var(--text);border:2px solid var(--line);border-radius:6px;padding:11px 6px;font-size:14px;font-weight:700;cursor:pointer;transition:border-color .12s ease,background .12s ease}.size:hover{border-color:var(--accent)}.size.active{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.stats{display:flex;gap:8px}.stat{flex:1;background:var(--board-bg);color:var(--accent-text);border-radius:6px;padding:6px 10px;text-align:center}.stat .label{font-size:10px;text-transform:uppercase;letter-spacing:1px;opacity:.85;font-weight:700}.stat .value{font-size:22px;font-weight:800;line-height:1.1}.board-wrap{position:relative;border-radius:14px;width:max-content;max-width:100%;margin:0 auto}.board{display:grid;grid-template-columns:repeat(var(--cols),var(--cell, 56px));gap:4px;padding:10px;border-radius:14px;background:linear-gradient(150deg,var(--panel-a),var(--panel-b));box-shadow:inset 0 1px 0 var(--panel-line),inset 0 0 0 1px #0000001f,0 10px 26px #00000038;touch-action:manipulation;transition:box-shadow .4s ease}.tile{position:relative;width:var(--cell, 56px);height:var(--cell, 56px);background:radial-gradient(120% 120% at 50% 22%,color-mix(in srgb,#fff 16%,var(--socket)),var(--socket));border:none;border-radius:8px;cursor:pointer;padding:0;overflow:hidden;box-shadow:inset 0 2px 3px var(--socket-shadow),inset 0 -1px #ffffff24;transition:filter 90ms ease,transform 60ms ease}.tile.cursor{outline:3px solid var(--accent);outline-offset:-3px;z-index:4}.tile:hover{filter:brightness(1.06)}.tile:active{transform:scale(.95)}.tile svg{display:block;width:100%;height:100%;filter:drop-shadow(0 1.5px 1.5px rgba(0,0,0,.34));transition:filter .26s ease}@keyframes tileSpin{0%{transform:rotate(-90deg)}to{transform:rotate(0)}}.tile.spin svg{animation:tileSpin .2s cubic-bezier(.22,1.2,.4,1);transform-origin:50% 50%}.pipe-shell{stroke:var(--tube-edge);fill:none}.pipe-body{stroke:var(--tube-body);fill:none;transition:stroke .3s ease}.pipe-gloss{stroke:var(--tube-gloss);fill:none;stroke-linecap:round}.pipe-flow{stroke:var(--liquid-lite);fill:none;opacity:0;stroke-dasharray:1 15;stroke-linecap:round;transition:opacity .3s ease}.hub-shell{fill:var(--tube-edge)}.hub-body{fill:var(--tube-body);transition:fill .3s ease}.hub-gloss{fill:var(--tube-gloss)}.tile.filled .pipe-body{stroke:var(--liquid)}.tile.filled .hub-body{fill:var(--liquid)}.tile.filled .pipe-gloss{stroke:var(--liquid-lite)}.tile.filled .hub-gloss{fill:var(--liquid-lite)}.tile.filled .pipe-flow{opacity:.9;animation:flow .9s linear infinite}.tile.filled svg{filter:drop-shadow(0 1.5px 1.5px rgba(0,0,0,.34)) drop-shadow(0 0 5px var(--liquid-glow))}@keyframes flow{to{stroke-dashoffset:-16}}.tile.source{background:radial-gradient(120% 120% at 50% 24%,var(--src-a),var(--src-b));box-shadow:inset 0 2px 4px #ffffff4d,inset 0 -3px 6px #00000047}.tile.drain{background:radial-gradient(120% 120% at 50% 24%,var(--out-a),var(--out-b));box-shadow:inset 0 2px 4px #ffffff4d,inset 0 -3px 6px #00000047}.tile.drain.filled{background:radial-gradient(120% 120% at 50% 24%,var(--src-a),var(--src-b))}.tile.source .pipe-body,.tile.drain .pipe-body{stroke:#ffffffeb}.tile.source .hub-body,.tile.drain .hub-body{fill:#ffffffeb}.tile.source .pipe-shell,.tile.drain .pipe-shell,.tile.source .hub-shell,.tile.drain .hub-shell{stroke:#00000038;fill:#00000038}.tile.source .pipe-gloss,.tile.drain .pipe-gloss,.tile.source .hub-gloss,.tile.drain .hub-gloss{stroke:#ffffffd9;fill:#ffffffd9}.tile .badge{position:absolute;top:4px;left:0;right:0;text-align:center;font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:#fff;text-shadow:0 1px 1px rgba(0,0,0,.45);pointer-events:none}.board.solved{box-shadow:inset 0 1px 0 var(--panel-line),inset 0 0 0 1px #0000001f,0 0 0 2px var(--liquid-glow),0 10px 30px #00000047,0 0 26px var(--liquid-glow)}.board.solved .tile.filled svg{animation:winPulse 1.1s ease-in-out infinite}@keyframes winPulse{0%,to{filter:drop-shadow(0 1.5px 1.5px rgba(0,0,0,.34)) drop-shadow(0 0 4px var(--liquid-glow))}50%{filter:drop-shadow(0 1.5px 1.5px rgba(0,0,0,.34)) drop-shadow(0 0 12px var(--liquid-glow))}}.btn{background:var(--accent);color:var(--accent-text);border:none;border-radius:6px;padding:10px 16px;font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap;transition:filter .12s ease}.btn:hover{filter:brightness(1.05)}.btn:active{filter:brightness(.95)}.overlay{position:absolute;inset:0;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:20px;background:var(--overlay-bg);z-index:10;opacity:0;pointer-events:none;transition:opacity .2s ease}.overlay.show{opacity:1;pointer-events:auto}.overlay .msg{font-size:clamp(28px,9vw,44px);font-weight:800}.overlay.win .msg{color:var(--liquid);text-shadow:0 0 18px var(--liquid-glow)}.overlay .sub{font-size:15px;color:var(--text);opacity:.9}.overlay .actions{display:flex;gap:10px;margin-top:8px}.how{font-size:13px;opacity:.85;line-height:1.5}.how b{font-weight:700}@media(prefers-reduced-motion:reduce){.tile.spin svg{animation:none}.tile.filled .pipe-flow{animation:none}.board.solved .tile.filled svg{animation:none}}
