/* Motion follows state changes; reading content keeps its position. */
.button,.ls-primary,.ls-small-button,.lo-archive-review [data-review-confirm],.lvt-card>footer button{
  transition:transform 120ms var(--lo-ease),box-shadow 120ms var(--lo-ease),background-color 160ms var(--lo-ease),color 160ms var(--lo-ease),border-color 160ms var(--lo-ease);
}
:is(.button,.ls-primary,.ls-small-button,.lo-archive-review [data-review-confirm],.lvt-card>footer button):active:not(:disabled){transform:translateY(3px);box-shadow:0 0 0 transparent}
.cover{transition:transform 220ms var(--lo-ease),box-shadow 220ms var(--lo-ease)}
.cover-stage{transition:background-color 200ms var(--lo-ease)}
@media(hover:hover){.book-open:hover .cover{transform:translateY(-5px);box-shadow:4px 9px 0 color-mix(in srgb,var(--ink) 17%,transparent)}}
.book-open:focus-visible .cover{transform:translateY(-5px);box-shadow:4px 9px 0 color-mix(in srgb,var(--ink) 17%,transparent)}
.book-open:active .cover{transform:translateY(0);transition-duration:var(--lo-fast)}
.app-shell{transition:grid-template-columns var(--lo-focus) var(--lo-ease)}
.sidebar{transition:width var(--lo-focus) var(--lo-ease),padding var(--lo-focus) var(--lo-ease)}
.brand-row{transition:margin var(--lo-focus) var(--lo-ease)}
.brand-row .brand img{transition:width var(--lo-focus) var(--lo-ease),height var(--lo-focus) var(--lo-ease)}
.app-shell :is(.brand-row .brand>span,.side-search>span,.side-search kbd,.side-nav button>span,.side-footer button>span,.side-footer a>span){transition:opacity var(--lo-focus) var(--lo-ease),transform var(--lo-focus) var(--lo-ease),visibility 0s}
.app-shell.sidebar-collapsed :is(.brand-row .brand>span,.side-search>span,.side-search kbd,.side-nav button>span,.side-footer button>span,.side-footer a>span){transition:opacity var(--lo-fast) var(--lo-ease),transform var(--lo-fast) var(--lo-ease),visibility 0s linear var(--lo-fast)}
.app-shell :is(.side-section-label,.workspace-label){transition:max-height var(--lo-focus) var(--lo-ease),margin var(--lo-focus) var(--lo-ease),padding var(--lo-focus) var(--lo-ease),opacity var(--lo-fast) var(--lo-ease),visibility 0s}
.app-shell.sidebar-collapsed :is(.side-section-label,.workspace-label){transition-delay:0s,0s,0s,0s,var(--lo-fast)}
dialog[open]{animation:lo-dialog-in var(--lo-focus) var(--lo-ease)}
dialog[open]::backdrop{animation:lo-backdrop-in var(--lo-focus) var(--lo-ease)}
dialog[open].is-closing{animation:lo-dialog-out var(--lo-fast) var(--lo-ease) forwards;pointer-events:none}
dialog[open].is-closing::backdrop{animation:lo-backdrop-out var(--lo-fast) var(--lo-ease) forwards}
#toast{animation:none}
@keyframes lo-dialog-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@keyframes lo-dialog-out{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}
@keyframes lo-backdrop-in{from{opacity:0}to{opacity:1}}
@keyframes lo-backdrop-out{from{opacity:1}to{opacity:0}}
@media(prefers-reduced-motion:reduce){
 *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
 .book-open:is(:hover,:focus-visible,:active) .cover,:is(.button,.ls-primary,.ls-small-button,.lo-archive-review [data-review-confirm],.lvt-card>footer button):active:not(:disabled){transform:none}
}
