.sort-board{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px 8px;max-width:440px;margin:4px auto 9px;justify-items:center;align-items:end;padding:12px 1px 7px}
.sort-tube{position:relative;display:flex;align-items:center;justify-content:flex-end;flex-direction:column;width:min(100%,79px);height:169px;border:0;background:transparent;padding:12px 5px 7px;transition:transform .15s ease;touch-action:manipulation}
.sort-tube:hover{transform:translateY(-3px)}
.sort-tube.is-selected{transform:translateY(-12px)}
.sort-contents{display:flex;flex-direction:column-reverse;align-items:center;gap:3px;width:100%;height:100%;border:3px solid #b2bfd0;border-top:0;border-radius:0 0 16px 16px;background:#edf3fa80;padding:5px 2px 6px;overflow:hidden;box-shadow:inset 0 -6px 11px #7591b30e}
.sort-rim{position:absolute;top:11px;left:1px;width:calc(100% - 2px);height:8px;border:3px solid #b2bfd0;border-radius:100px;background:#fff;z-index:1}
.is-selected .sort-contents{border-color:#5278c9;box-shadow:0 0 0 4px #5278c91a,inset 0 -6px 11px #7591b30e}
.is-selected .sort-rim{border-color:#5278c9}
.sort-ball{display:block;flex:0 0 auto;aspect-ratio:1;width:min(100%,31px);border-radius:50%;background:radial-gradient(circle at 31% 25%,#ffffffa6 0 8%,#ffffff33 14%,transparent 42%),var(--liquid-color);box-shadow:inset -3px -4px 5px #26334722,0 1px 2px #34435713}
.sort-water{width:100%;min-height:0;flex:1;background:var(--liquid-color);box-shadow:inset 0 1px #fff6}
body[data-sort="water"] .sort-contents{gap:0;padding:4px 1px 3px;border-bottom-left-radius:16px;border-bottom-right-radius:16px}
body[data-sort="water"] .sort-water{flex:0 0 25%;border-radius:2px 2px 0 0}
body[data-sort="water"] .sort-water:first-child{border-radius:0 0 12px 12px}
body[data-sort="water"] .sort-contents{justify-content:flex-start}
.sort-tube:focus-visible{outline:3px solid #3a79dc;outline-offset:2px;border-radius:12px}
@media(max-width:370px){.sort-board{gap:13px 3px}.sort-tube{height:145px;padding:12px 3px 6px}.sort-ball{width:min(100%,29px)}}

.sort-board{position:relative;isolation:isolate}
.sort-tube.pour-source{transform:translateY(-10px) rotate(var(--tilt-angle,20deg));transform-origin:50% 88%;z-index:5;transition:transform .28s ease}
.sort-tube.pour-destination{border-radius:14px;filter:drop-shadow(0 0 6px #8caae17a)}
.sort-pour-overlay{position:absolute;display:block;pointer-events:none;z-index:12}
.sort-flying-ball{width:30px;height:30px;border-radius:50%;background:radial-gradient(circle at 30% 23%,#fff8 0 9%,#fff3 15%,transparent 45%),var(--liquid-color);box-shadow:inset -4px -5px 4px #22354a35,0 4px 9px #243e5d35}
.sort-water-stream{height:7px;border-radius:50px;background:linear-gradient(180deg,#fff9,var(--liquid-color) 38%,var(--liquid-color) 82%,#26334721);transform-origin:0 50%;box-shadow:0 2px 4px #3147602b}
@media(prefers-reduced-motion:reduce){.sort-tube.pour-source{transition:none}}
.sort-ball.is-being-poured{opacity:.15;transition:opacity .15s ease}

.sort-board{position:relative;isolation:isolate}
.sort-tube.is-pouring{will-change:transform;filter:drop-shadow(0 12px 11px #34496727)}
.sort-tube:disabled{cursor:default}
.pour-water-stream{position:absolute;z-index:60;pointer-events:none;transform-origin:50% 0;display:block;width:9px;height:63px;border-radius:12px 12px 24px 24px;background:linear-gradient(90deg,#ffffff80,var(--drop-color) 42%,var(--drop-color) 75%,#ffffff90);box-shadow:0 1px 4px #6581aa44}
.pour-ball-flight{position:absolute;z-index:60;pointer-events:none;width:28px;height:28px;border-radius:50%;background:radial-gradient(circle at 30% 28%,#ffffffbd,#ffffff36 22%,var(--drop-color) 48%);box-shadow:inset -3px -4px 5px #2633473b,0 2px 7px #374e6244}
body[data-sort="water"] .sort-water{animation:liquid-arrive .4s cubic-bezier(.2,.8,.2,1)}
body[data-sort="ball"] .sort-ball{animation:ball-settle .3s ease-out}
@keyframes liquid-arrive{from{filter:brightness(1.17);transform:scaleY(.8)}to{filter:brightness(1);transform:scaleY(1)}}
@keyframes ball-settle{0%{transform:translateY(-5px)}65%{transform:translateY(2px)}100%{transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.sort-water,.sort-ball{animation:none!important}}
