/* Motion language: sharp controls, quiet surfaces. No perpetual decoration. */
:root { --motion-snap:cubic-bezier(.22,1.32,.42,1); --motion-punch:cubic-bezier(.22,1.55,.42,1); }
/* One small overshoot and a softer return; native easing adds no JS frame loop. */
@supports (transition-timing-function:linear(0,1)) {
    :root {
        --motion-snap:linear(0,.48 18%,.88 40%,1.08 64%,.98 84%,1);
        --motion-punch:linear(0,.5 18%,.9 40%,1.18 62%,.96 82%,1);
    }
}
/* Remove legacy blanket layer promotion, gradient loops and layout transitions. */
body :is(a, button, input, select, textarea, summary, .info-tile, .stat-card, .sidebar-item, .counter-value) {
    will-change:auto;
    transition:transform 340ms var(--motion-punch), opacity 160ms ease,
        color 160ms ease, background-color 160ms ease, border-color 160ms ease;
    transition-delay:0ms;
}
.reveal, .reveal.is-visible, .reveal.is-revealed, .reveal-scale, .glass-panel.reveal {
    opacity:1; transform:none; transition-delay:0ms;
}
body :is(.tag-pill, .counter-value, .text-gradient), .toc-link::before { animation:none; }
.sidebar-item:hover, .info-tile:hover { transform:none; }
.tab-button.is-active { box-shadow:none; }
/* Fixed-size geometric pulse; position is written only at creation. */
.interaction-pulse { position:fixed; width:34px; height:34px; border:2px solid var(--brand);
    pointer-events:none; z-index:9999; border-radius:2px; contain:strict; }
.interaction-pulse::after { content:""; position:absolute; inset:6px; border:1px solid var(--brand-cool); border-radius:50%; }
.identity-poster { transition:transform 280ms var(--motion-snap); }
.identity-poster::after { content:""; position:absolute; inset:0; pointer-events:none;
    background:linear-gradient(110deg,transparent 35%,#fff5 49%,transparent 62%);
    transform:translateX(-110%); opacity:0; }
/* Sheen stays inside small control surfaces, never across an entire page. */
body :is(button, .btn, .btn-secondary, .btn-ghost, .back-link, .link-chip) { position:relative; overflow:hidden; }
body :is(button, .btn, .btn-secondary, .btn-ghost, .back-link, .link-chip)::after {
    content:""; position:absolute; inset:0; pointer-events:none;
    background:linear-gradient(110deg,transparent 25%,#ffffffa0 45%,#ffffff50 54%,transparent 68%);
    transform:translateX(-115%); opacity:0;
}
.folder-card::after, .doc-item::after, .record-card::after {
    content:""; position:absolute; left:0; top:12px; bottom:12px; width:4px;
    background:var(--brand); transform:scaleY(0); transform-origin:top;
    transition:transform 230ms var(--motion-snap); pointer-events:none;
}
body :is(.brand-mark, .nav-archive, .markdown-body a) { text-decoration:none;
    background-image:linear-gradient(var(--brand),var(--brand));
    background-size:0 1px; background-repeat:no-repeat; background-position:left bottom;
    transition:background-size 200ms var(--motion-snap), color 160ms ease, transform 200ms var(--motion-snap); }
.folder-card__arrow, body button > i, body a > i { transition:transform 280ms var(--motion-punch); }
.folder-card__title, .doc-item__title, .record-card__title { transition:transform 280ms var(--motion-punch), color 160ms ease; }
.search-bar:focus-within .search-bar__icon { color:var(--brand); transform:scale(1.25) rotate(-12deg); }
.search-bar__icon { transition:transform 180ms var(--motion-snap), color 180ms ease; }
body :is(input,select,textarea):focus { border-color:var(--brand); box-shadow:3px 3px 0 #d7ff3f; }
/* Keyboard interaction has the same energy as pointer interaction. */
body :is(a,button,summary):focus-visible { outline:2px solid var(--brand); outline-offset:3px; }
body :is(button,.btn,.btn-secondary,.btn-ghost,.back-link,.link-chip):focus-visible::after { animation:control-scan 520ms ease-out; }
body :is(button,.btn,.btn-secondary,.btn-ghost,.back-link,.link-chip):focus-visible:not(:disabled):not([aria-disabled="true"]) {
    background:var(--brand); color:#14160c; border-color:var(--brand); box-shadow:4px 4px 0 #7661d6;
}
body :is(.folder-card,.doc-item,.record-card):focus-visible { border-color:var(--brand); box-shadow:5px 5px 0 #d7ff3f; }
body :is(a,button,summary):active:not(:disabled):not([aria-disabled="true"]) { transform:translateY(1px) scale(.975); }
body .markdown-body a:active { transform:none; opacity:.7; }
body :is(button:disabled,[aria-disabled="true"]) { opacity:.5; cursor:not-allowed; transform:none; }
body :is(button:disabled,[aria-disabled="true"])::after { animation:none; }
.doc-layout.is-toc-collapsed .doc-toc-toggle i { transform:rotate(90deg); }
.doc-toc-sidebar .doc-toc-toggle i { transition:transform 220ms var(--motion-snap); }
.toc-link.is-active::before { opacity:1; transform:none; }
.toc-link.is-active { box-shadow:inset 2px 0 var(--brand); }
.mobile-category-toggle__icon { transition:transform 220ms var(--motion-snap); }
/* Finite selection feedback also works when filtering replaces the button node. */
.tag-pill.is-selected, .tab-button.is-active { animation:selection-confirm 300ms var(--motion-punch); }
.doc-toc-sidebar:not(.is-tilting) { backdrop-filter:none; }
@media (hover:hover) and (pointer:fine) {
    body :is(button,.btn,.btn-secondary,.btn-ghost,.back-link,.link-chip):hover:not(:disabled):not([aria-disabled="true"]) {
        transform:translate(-2px,-4px) scale(1.07); background:var(--brand); color:#14160c;
        border-color:var(--brand); box-shadow:4px 4px 0 #7661d6;
    }
    body :is(button,.btn,.btn-secondary,.btn-ghost,.back-link,.link-chip):hover:not(:disabled):not([aria-disabled="true"])::after { animation:control-scan 520ms ease-out; }
    body :is(.folder-card,.doc-item,.record-card):hover { transform:translate(-3px,-6px) scale(1.025); border-color:var(--brand); background:#252a1b; box-shadow:5px 5px 0 #d7ff3f; }
    body :is(.folder-card,.doc-item,.record-card):hover::after,
    body :is(.folder-card,.doc-item,.record-card):focus-visible::after { transform:scaleY(1); }
    .folder-card:hover .folder-card__arrow { transform:translateX(7px) rotate(-45deg) scale(1.12); background:var(--brand); color:#14160c; border-color:var(--brand); }
    body :is(.folder-card,.doc-item,.record-card):hover :is(.folder-card__title,.doc-item__title,.record-card__title) { transform:translateX(6px); color:var(--brand); }
    body :is(button,.btn,.btn-secondary,.btn-ghost,.back-link):hover > i { transform:translateX(2px) rotate(-12deg) scale(1.15); }
    body :is(.brand-mark,.nav-archive,.markdown-body a):hover,
    body :is(.brand-mark,.nav-archive,.markdown-body a):focus-visible { background-size:100% 1px; color:var(--brand); }
    body .toc-link:hover { transform:none; color:#14160c; background:var(--brand); }
    body .sidebar-subitem:hover { transform:translateX(4px); }
    body :is(.brand-mark,.nav-archive):hover { transform:translateY(-3px) rotate(-2deg) scale(1.06); }
    .info-tile:hover { border-color:#575761; }
    .info-tile:hover .tile-icon { transform:translateY(-1px); }
    .tile-icon { transition:transform 240ms var(--motion-snap); }
    .identity-poster:hover::after { animation:poster-scan 750ms ease-out; }
}
@keyframes control-scan {
    0% { transform:translateX(-115%); opacity:0; }
    20% { opacity:1; }
    72% { transform:translateX(115%); opacity:.12; }
    86% { transform:translateX(104%); opacity:.04; }
    100% { transform:translateX(115%); opacity:0; }
}
@keyframes poster-scan {
    0% { transform:translateX(-110%); opacity:0; }
    30% { opacity:.5; }
    74% { transform:translateX(110%); opacity:.08; }
    87% { transform:translateX(103%); opacity:.025; }
    100% { transform:translateX(110%); opacity:0; }
}
@keyframes selection-confirm {
    0% { opacity:.7; transform:scale(.88); }
    65% { opacity:1; transform:scale(1.08); }
    84% { opacity:1; transform:scale(.975); }
    100% { opacity:1; transform:scale(1); }
}
/* Press wins over hover, including on touch. Hard shadows switch, never interpolate. */
body :is(a,button,summary):active:not(:disabled):not([aria-disabled="true"]) {
    /* Important also wins over entrance/selection animations while held. */
    transform:translate(2px,2px) scale(.88) !important; box-shadow:none; transition-duration:90ms;
    transition-timing-function:ease-out;
}
body .markdown-body a:active:not(:disabled):not([aria-disabled="true"]) { transform:none !important; }
/* Scroll rows must never change the scrollable overflow, including on press. */
#docTocBody { overflow-x:hidden; overflow-y:auto; scrollbar-gutter:stable; min-width:0; }
.doc-toc-sidebar, .toc-list { min-width:0; }
body .toc-link { min-width:0; overflow-wrap:anywhere; font-weight:600; }
body .toc-link > span { min-width:0; }
body .toc-link > i { flex-shrink:0; }
body .toc-link:hover > i { transform:rotate(-15deg) scale(1.25); }
body .toc-link:active > i { transform:scale(.8); }
body .toc-link:active:not(:disabled):not([aria-disabled="true"]) { transform:none !important; opacity:.7; }
/* Hidden clear control retains exactly the same box and leaves the focus tree. */
.tag-filter-area__header { min-height:32px; gap:8px; }
#tagClear { display:inline-flex; align-items:center; justify-content:center; min-height:32px; flex-shrink:0; }
#tagClear.hidden { display:inline-flex !important; visibility:hidden; pointer-events:none; }
/* Reserve a small animation gutter inside the tag scroller. */
.tag-filter-area__body { overflow-x:hidden; padding:6px 8px; scrollbar-gutter:stable; }
@media (hover:none), (pointer:coarse) {
    .identity-poster { transform:none !important; }
    body :is(a,button):hover { box-shadow:none; }
    body :is(a,button):not(:active) { transform:none; }
}
@media (prefers-reduced-motion:reduce) {
    html, body { scroll-behavior:auto; }
    body *, body *::before, body *::after { animation:none !important; transition:none !important; }
    body :is(a,button,summary,.identity-poster,.folder-card__arrow,.tile-icon):hover,
    body :is(a,button,summary):active:not(:disabled):not([aria-disabled="true"]) { transform:none !important; }
    body :is(.folder-card__title,.doc-item__title,.record-card__title,button > i,a > i,.search-bar__icon) { transform:none !important; }
    .interaction-pulse { display:none; }
}
