/* Ruvo UI components (Rev 16). Tokens come from app-theme.css. */
.r-sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
/* slide to confirm */
.r-slide{position:relative;height:52px;border:1px solid var(--r-text);border-radius:26px;background:var(--r-bg);overflow:hidden;user-select:none;touch-action:pan-y;margin:14px 0 6px;max-width:440px}
.r-slide-fill{position:absolute;left:0;top:0;bottom:0;width:52px;background:var(--r-panel);border-right:1px dashed var(--r-line-2);border-radius:26px}
.r-slide-text{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding-left:48px;font:600 14px Manrope,sans-serif;color:var(--r-text);opacity:calc(1 - var(--p,0)*1.4);pointer-events:none}
.r-slide-handle{position:absolute;left:3px;top:3px;width:44px;height:44px;border-radius:50%;border:0;background:var(--r-text);color:var(--r-on-ink);font:700 18px Manrope,sans-serif;cursor:grab;touch-action:none;display:grid;place-items:center}
.r-slide.is-drag .r-slide-handle{cursor:grabbing}
.r-slide.is-anim .r-slide-handle{transition:transform var(--r-t-slow) var(--r-ease-spring)}
.r-slide.is-anim .r-slide-fill{transition:width var(--r-t-slow) var(--r-ease-spring)}
.r-slide.is-hold{border-style:solid;border-width:2px}
.r-slide.is-busy .r-slide-text{opacity:1;padding-left:0}
.r-slide.is-disabled{border-style:dashed;border-color:var(--r-line-2)}.r-slide.is-disabled .r-slide-handle{background:var(--r-line-2);cursor:not-allowed}
.r-slide.is-disabled .r-slide-text{color:var(--r-text-2)}
.r-slide-handle:focus-visible{outline:2px solid var(--r-text);outline-offset:3px;box-shadow:0 0 0 2px var(--r-bg) inset}
.r-slide:focus-within{box-shadow:0 0 0 2px var(--r-bg),0 0 0 4px var(--r-text)}
.r-slide-alt{font-size:13px;color:var(--r-text-2);margin:4px 0 0}
/* rolling counter */
.r-roll{display:inline-flex;align-items:flex-end;font-variant-numeric:tabular-nums;white-space:nowrap}
.r-roll-col{display:inline-block;height:1.15em;line-height:1.15;overflow:hidden;vertical-align:bottom}
.r-roll-strip{display:block;transition:transform var(--r-t-slow) var(--r-ease-out)}
.r-roll-vis{display:inline-flex}
.r-roll-strip:before{content:'0\A 1\A 2\A 3\A 4\A 5\A 6\A 7\A 8\A 9';white-space:pre;display:block;line-height:1.15}
.r-roll-ch:before{content:attr(data-c);white-space:pre;line-height:1.15}
.r-roll-ch{line-height:1.15;display:inline-block;height:1.15em;vertical-align:bottom}
/* dot loader + shimmer */
.r-loader{display:inline-flex;align-items:center;gap:10px;color:var(--r-text-2)}
.r-dots{display:inline-grid;grid-template-columns:repeat(3,4px);gap:3px}
.r-dots i{width:4px;height:4px;border-radius:50%;background:var(--r-line-1);opacity:.25;animation:r-dot 1.2s var(--r-ease-io) infinite;animation-delay:calc(var(--i)*90ms)}
@keyframes r-dot{0%,100%{opacity:.25}40%{opacity:1}}
.r-shimmer{background:linear-gradient(90deg,var(--r-text-2) 0 40%,var(--r-text) 50%,var(--r-text-2) 60% 100%) 0 0/250% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:r-shim 1.6s linear infinite}
@keyframes r-shim{from{background-position:100% 0}to{background-position:-100% 0}}
/* copy field */
.r-copy{display:inline-flex;align-items:center;gap:6px;max-width:100%;border:1px solid var(--r-grid);border-radius:6px;padding:2px 2px 2px 8px;background:var(--r-bg);font:12px var(--g-mono);vertical-align:middle}
.r-copy-v{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--r-text)}
.r-copy-btn{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--r-line-2);background:transparent;color:var(--r-text);border-radius:4px;font:600 11px var(--g-mono);padding:3px 7px;min-height:28px;cursor:pointer;flex:none}
.r-copy-btn:hover{background:var(--r-panel)}
.r-copy-ic{position:relative;width:10px;height:11px}
.r-copy-ic:before,.r-copy-ic:after{content:'';position:absolute;width:7px;height:8px;border:1.5px solid currentColor;border-radius:2px;transition:all var(--r-t-base) var(--r-ease-out)}
.r-copy-ic:before{left:0;top:0;opacity:.55}.r-copy-ic:after{left:3px;top:3px;background:var(--r-bg)}
.r-copy.is-done .r-copy-ic:before{opacity:0;transform:translate(3px,3px)}
.r-copy.is-done .r-copy-ic:after{left:2px;top:0;width:4px;height:8px;border-width:0 2px 2px 0;border-radius:0;background:transparent;transform:rotate(45deg)}
.r-copy.is-done{border-color:var(--r-text)}
/* toast stack: newest in front, older peek behind; fans out on hover/focus */
.f-toasts{display:block!important;height:var(--stack-h,0px);transition:height var(--r-t-base) var(--r-ease-out)}
.f-toasts .f-toast{position:absolute;left:0;right:0;bottom:0;transform:translateY(var(--y,0)) scale(var(--s,1));transform-origin:50% 100%;opacity:var(--o,1);transition:transform var(--r-t-slow) var(--r-ease-spring),opacity var(--r-t-base) var(--r-ease-out);box-shadow:0 6px 18px rgba(28,28,28,.10)!important;border-radius:10px;background:var(--r-bg)}
.f-toasts .f-toast.is-behind{pointer-events:none}.f-toasts.is-open .f-toast.is-behind{pointer-events:auto}
.f-toasts .f-toast.is-behind>*{visibility:hidden}.f-toasts.is-open .f-toast>*{visibility:visible}
@media(prefers-reduced-motion:reduce){
 .r-slide *,.r-slide.is-anim *{transition:none!important}
 .r-roll-strip{transition:none!important}
 .r-dots i{animation:none;opacity:.7}.r-shimmer{animation:none;color:var(--r-text-2);background:none}
 .r-copy-ic:before,.r-copy-ic:after{transition:none}
 .f-toasts,.f-toasts .f-toast{transition:none!important}}
.g-table tbody th small,.d-open small,.d-addr,tr:hover small{color:var(--r-text-2p)}
.sidebar,.assistant,.result,tr:hover,.f-item:hover,[class*=panel]:hover,.periods button:hover{--r-text-2:var(--r-text-2p)}
