/* Only the document boundary suppresses native pull-to-refresh.
   Body has overflow:auto and must allow wheel chaining to the document. */
html{overscroll-behavior-y:none}
body{overscroll-behavior-y:auto}
.pull-refresh{--pull-progress:0;position:fixed;z-index:10000;top:env(safe-area-inset-top,0px);left:50%;transform:translate(-50%,calc(var(--pull-offset,0px) - 16px));max-width:calc(100vw - 32px);pointer-events:none;opacity:0;visibility:hidden;transition:opacity .18s,visibility .18s;color:var(--ivory);font:12px/1.4 var(--body)}
.pull-refresh.visible{opacity:1;visibility:visible}
.pull-refresh-orb{position:relative;display:block;width:64px;height:64px;border-radius:50%;background:radial-gradient(circle at 35% 25%,#344740ed,#122021f5 65%);box-shadow:inset 0 1px 0 #e5ffe61f,0 8px 26px #0005,0 0 24px rgb(127 191 164 / calc(var(--pull-progress)*.22))}
.pull-refresh svg{position:absolute;inset:0;width:64px;height:64px;overflow:visible;transform:rotate(-90deg)}
.pull-refresh-track,.pull-refresh-ring{fill:none;stroke-width:2.5}
.pull-refresh-track{stroke:#e5ffe612}
.pull-refresh-ring{stroke:#b4e4c7;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:calc(100 - var(--pull-progress)*100);filter:drop-shadow(0 0 3px #9de5bdbb);opacity:clamp(0,calc(var(--pull-progress)*10),1)}
.pull-refresh-symbol{position:absolute;inset:0;display:grid;place-items:center;font:24px/1 system-ui;color:#d4efdd;text-shadow:0 0 12px #a6e8c360;transition:transform .16s}
.pull-refresh.ready .pull-refresh-symbol{transform:scale(1.12)}
.pull-refresh-dust{position:absolute;inset:0;overflow:visible}
.pull-refresh-dust i{position:absolute;left:32px;top:32px;width:var(--dust-size);height:var(--dust-size);margin:-1px;border-radius:50%;background:#e4f5d5;box-shadow:0 0 5px #ccf3b9,0 0 10px #95d7b080;opacity:0;animation:pull-dust-in .46s var(--dust-delay) cubic-bezier(.2,.6,.3,1) both}
@keyframes pull-dust-in{0%{transform:translate(var(--dust-x),var(--dust-y)) scale(.3);opacity:0}25%{opacity:.95}80%{opacity:.9}100%{transform:translate(var(--dust-end-x),var(--dust-end-y)) scale(.35);opacity:0}}
.pull-refresh-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.pull-refresh.loading .pull-refresh-ring{stroke-dasharray:72 28;stroke-dashoffset:0;transform-origin:32px 32px;animation:pull-refresh-spin .85s linear infinite}
.pull-refresh.loading .pull-refresh-symbol{font-size:0}
.pull-refresh.loading .pull-refresh-symbol:after{content:'';width:5px;height:5px;border-radius:50%;background:#d4efdd;box-shadow:0 0 12px #a6e8c3}
@keyframes pull-refresh-spin{to{transform:rotate(360deg)}}
.pull-refresh.error{display:flex;align-items:center;gap:12px;width:max-content;padding:10px 16px 10px 10px;border:1px solid var(--line);border-radius:24px;background:var(--ground)}
.pull-refresh.error .pull-refresh-orb{flex:none;width:40px;height:40px}
.pull-refresh.error svg{display:none}
.pull-refresh.error .pull-refresh-label{position:static;width:auto;height:auto;margin:0;clip-path:none;white-space:normal;overflow:visible}
@media(prefers-reduced-motion:reduce){.pull-refresh,.pull-refresh-symbol{transition:none}.pull-refresh.loading .pull-refresh-ring{animation:none}.pull-refresh-dust{display:none}}
/* Move the content and viewport-fixed chrome together without reparenting navigation. */
#app{top:var(--pull-screen,0px)}
.nav-dock,#flow-background{translate:0 var(--pull-screen,0px)}
.pull-settling #app{transition:top .28s cubic-bezier(.22,1,.36,1)}
.pull-settling .nav-dock,.pull-settling #flow-background{transition:translate .28s cubic-bezier(.22,1,.36,1)}
.pull-refresh-orb{background:radial-gradient(circle,#16302544,transparent 70%);box-shadow:none}
.pull-refresh-dust i{animation:none;opacity:0;box-shadow:0 0 3px #cdf5bfbb,0 0 7px #a6e8bc55;will-change:transform,opacity}
.pull-refresh.loading .pull-refresh-dust{animation:pull-refresh-spin 1.8s linear infinite}
.pull-refresh.error .pull-refresh-dust{display:none}
@media(prefers-reduced-motion:reduce){.pull-refresh-dust{display:block}.pull-refresh.loading .pull-refresh-dust{animation:none}.pull-settling #app,.pull-settling .nav-dock,.pull-settling #flow-background{transition:none}}
/* Fine golden dust follows individual curved paths, with a short smoothing interval. */
.pull-refresh-dust i{background:#ffe38a;box-shadow:0 0 2px #ffd76a99,0 0 5px #efb94b44;transition:transform .12s linear,opacity .12s linear}
.pull-refresh-symbol{color:#ffe6a0;text-shadow:0 0 10px #f0c65b55}
.pull-refresh.loading .pull-refresh-symbol:after{background:#ffe6a0;box-shadow:0 0 10px #f0c65b77}
.pull-refresh-orb{background:radial-gradient(circle,#59451b22,transparent 70%)}
@media(prefers-reduced-motion:reduce){.pull-refresh-dust i{transition:none}}

/* Finish gathering before spinning the complete ring. */
.pull-refresh.loading:not(.assembled) .pull-refresh-dust{animation:none}
