/* IPN 1.10 · Back to top (assets/js/totop.js). Identical copies in site.d / account.d / studio.d — edit one, copy to all. */
.totop { position: fixed; inset-inline-end: 18px; bottom: max(18px, env(safe-area-inset-bottom)); z-index: 70; display: grid; place-items: center; width: 46px; height: 46px; border-radius: 50%; background: var(--paper, #fff); color: var(--ink, #111); border: 1px solid var(--line, rgba(0,0,0,.12)); box-shadow: 0 10px 30px -14px rgba(0,0,0,.4); text-decoration: none; opacity: 0; transform: translateY(8px); transition: opacity .2s ease-out, transform .2s ease-out, background-color .2s ease-out; }
.totop.is-on { opacity: 1; transform: none; }
.totop:hover { transform: translateY(-1px); background: var(--sunk, rgba(0,0,0,.04)); }
.totop:focus-visible { outline: 2px solid var(--accent, #E8313F); outline-offset: 2px; }
.totop .ic { width: 20px; height: 20px; position: relative; z-index: 1; }
.totop__ring { position: absolute; inset: -1px; width: calc(100% + 2px); height: calc(100% + 2px); transform: rotate(-90deg); pointer-events: none; }
.totop__track { stroke: var(--line, rgba(0,0,0,.12)); stroke-width: 2.5; }
.totop__bar { stroke: var(--accent, #E8313F); stroke-width: 2.5; stroke-linecap: round; transition: stroke-dashoffset .15s linear; }
html[dir="rtl"] .totop__ring { transform: rotate(-90deg) scale(1, -1); }
.st .totop { bottom: 22px; }
@media (max-width: 760px) { .ac-body .totop { bottom: calc(84px + env(safe-area-inset-bottom)); } }
@media (prefers-reduced-motion: reduce) { .totop, .totop__bar { transition: none; } }
