*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}/*
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
*//*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/

*,
::before,
::after {
  box-sizing: border-box; /* 1 */
  border-width: 0; /* 2 */
  border-style: solid; /* 2 */
  border-color: #e5e7eb; /* 2 */
}

::before,
::after {
  --tw-content: '';
}

/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/

html,
:host {
  line-height: 1.5; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
  -moz-tab-size: 4; /* 3 */
  tab-size: 4; /* 3 */
  font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */
  font-feature-settings: normal; /* 5 */
  font-variation-settings: normal; /* 6 */
  -webkit-tap-highlight-color: transparent; /* 7 */
}

/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/

body {
  margin: 0; /* 1 */
  line-height: inherit; /* 2 */
}

/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/

hr {
  height: 0; /* 1 */
  color: inherit; /* 2 */
  border-top-width: 1px; /* 3 */
}

/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr:where([title]) {
  text-decoration: underline dotted;
}

/*
Remove the default font size and weight for headings.
*/

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/*
Reset links to optimize for opt-in styling instead of opt-out.
*/

a {
  color: inherit;
  text-decoration: inherit;
}

/*
Add the correct font weight in Edge and Safari.
*/

b,
strong {
  font-weight: bolder;
}

/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
  font-feature-settings: normal; /* 2 */
  font-variation-settings: normal; /* 3 */
  font-size: 1em; /* 4 */
}

/*
Add the correct font size in all browsers.
*/

small {
  font-size: 80%;
}

/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/

table {
  text-indent: 0; /* 1 */
  border-color: inherit; /* 2 */
  border-collapse: collapse; /* 3 */
}

/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/

button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  font-feature-settings: inherit; /* 1 */
  font-variation-settings: inherit; /* 1 */
  font-size: 100%; /* 1 */
  font-weight: inherit; /* 1 */
  line-height: inherit; /* 1 */
  letter-spacing: inherit; /* 1 */
  color: inherit; /* 1 */
  margin: 0; /* 2 */
  padding: 0; /* 3 */
}

/*
Remove the inheritance of text transform in Edge and Firefox.
*/

button,
select {
  text-transform: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/

button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button; /* 1 */
  background-color: transparent; /* 2 */
  background-image: none; /* 2 */
}

/*
Use the modern Firefox focus style for all focusable elements.
*/

:-moz-focusring {
  outline: auto;
}

/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/

:-moz-ui-invalid {
  box-shadow: none;
}

/*
Add the correct vertical alignment in Chrome and Firefox.
*/

progress {
  vertical-align: baseline;
}

/*
Correct the cursor style of increment and decrement buttons in Safari.
*/

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/

[type='search'] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

/*
Remove the inner padding in Chrome and Safari on macOS.
*/

::-webkit-search-decoration {
  -webkit-appearance: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/*
Removes the default spacing and border for appropriate elements.
*/

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

fieldset {
  margin: 0;
  padding: 0;
}

legend {
  padding: 0;
}

ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

/*
Reset default styling for dialogs.
*/
dialog {
  padding: 0;
}

/*
Prevent resizing textareas horizontally by default.
*/

textarea {
  resize: vertical;
}

/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/

input::placeholder,
textarea::placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}

/*
Set the default cursor for buttons.
*/

button,
[role="button"] {
  cursor: pointer;
}

/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
  cursor: default;
}

/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block; /* 1 */
  vertical-align: middle; /* 2 */
}

/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/

img,
video {
  max-width: 100%;
  height: auto;
}

/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}
#root .pointer-events-none {
  pointer-events: none;
}
#root .visible {
  visibility: visible;
}
#root .relative {
  position: relative;
}
#root .mt-3 {
  margin-top: 0.75rem;
}
#root .mt-4 {
  margin-top: 1rem;
}
#root .flex {
  display: flex;
}
#root .table {
  display: table;
}
#root .hidden {
  display: none;
}
#root .size-4 {
  width: 1rem;
  height: 1rem;
}
#root .h-10 {
  height: 2.5rem;
}
#root .h-11 {
  height: 2.75rem;
}
#root .h-12 {
  height: 3rem;
}
#root .h-9 {
  height: 2.25rem;
}
#root .w-10 {
  width: 2.5rem;
}
#root .w-11 {
  width: 2.75rem;
}
#root .w-fit {
  width: fit-content;
}
#root .shrink-0 {
  flex-shrink: 0;
}
#root .transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
#root .select-text {
  user-select: text;
}
#root .resize {
  resize: both;
}
#root .scroll-m-20 {
  scroll-margin: 5rem;
}
#root .flex-row {
  flex-direction: row;
}
#root .flex-col {
  flex-direction: column;
}
#root .items-center {
  align-items: center;
}
#root .justify-center {
  justify-content: center;
}
#root .gap-0 {
  gap: 0px;
}
#root .gap-1 {
  gap: 0.25rem;
}
#root .gap-1\.5 {
  gap: 0.375rem;
}
#root .gap-2 {
  gap: 0.5rem;
}
#root .gap-6 {
  gap: 1.5rem;
}
#root .overflow-hidden {
  overflow: hidden;
}
#root .whitespace-nowrap {
  white-space: nowrap;
}
#root .text-balance {
  text-wrap: balance;
}
#root .rounded {
  border-radius: 0.25rem;
}
#root .rounded-2xl {
  border-radius: 1rem;
}
#root .rounded-full {
  border-radius: 9999px;
}
#root .rounded-md {
  border-radius: 0.375rem;
}
#root .rounded-xl {
  border-radius: 0.75rem;
}
#root .border {
  border-width: 1px;
}
#root .border-0 {
  border-width: 0px;
}
#root .border-b {
  border-bottom-width: 1px;
}
#root .border-l-2 {
  border-left-width: 2px;
}
#root .border-border {
  --tw-border-opacity: 1;
  border-color: rgb(var(--ds-border) / var(--tw-border-opacity, 1));
}
#root .border-transparent {
  border-color: transparent;
}
#root .bg-background {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-surface) / var(--tw-bg-opacity, 1));
}
#root .bg-card {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-surface) / var(--tw-bg-opacity, 1));
}
#root .bg-destructive {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-primary) / var(--tw-bg-opacity, 1));
}
#root .bg-muted {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-muted) / var(--tw-bg-opacity, 1));
}
#root .bg-primary {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-primary) / var(--tw-bg-opacity, 1));
}
#root .bg-secondary {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-muted) / var(--tw-bg-opacity, 1));
}
#root .p-0 {
  padding: 0px;
}
#root .px-2 {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
#root .px-3 {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}
#root .px-4 {
  padding-left: 1rem;
  padding-right: 1rem;
}
#root .px-5 {
  padding-left: 1.25rem;
  padding-right: 1.25rem;
}
#root .px-6 {
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}
#root .px-\[0\.3rem\] {
  padding-left: 0.3rem;
  padding-right: 0.3rem;
}
#root .py-0\.5 {
  padding-top: 0.125rem;
  padding-bottom: 0.125rem;
}
#root .py-2 {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}
#root .py-6 {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}
#root .py-\[0\.2rem\] {
  padding-top: 0.2rem;
  padding-bottom: 0.2rem;
}
#root .pb-2 {
  padding-bottom: 0.5rem;
}
#root .pl-3 {
  padding-left: 0.75rem;
}
#root .text-center {
  text-align: center;
}
#root .font-mono {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
#root .text-2xl {
  font-size: 1.5rem;
  line-height: 2rem;
}
#root .text-3xl {
  font-size: 1.875rem;
  line-height: 2.25rem;
}
#root .text-4xl {
  font-size: 2.25rem;
  line-height: 2.5rem;
}
#root .text-base {
  font-size: 1rem;
  line-height: 1.5rem;
}
#root .text-lg {
  font-size: 1.125rem;
  line-height: 1.75rem;
}
#root .text-sm {
  font-size: 0.875rem;
  line-height: 1.25rem;
}
#root .text-xl {
  font-size: 1.25rem;
  line-height: 1.75rem;
}
#root .text-xs {
  font-size: 0.75rem;
  line-height: 1rem;
}
#root .font-extrabold {
  font-weight: 800;
}
#root .font-medium {
  font-weight: 500;
}
#root .font-semibold {
  font-weight: 600;
}
#root .italic {
  font-style: italic;
}
#root .leading-7 {
  line-height: 1.75rem;
}
#root .leading-none {
  line-height: 1;
}
#root .tracking-tight {
  letter-spacing: -0.025em;
}
#root .text-card-foreground {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-foreground) / var(--tw-text-opacity, 1));
}
#root .text-foreground {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-foreground) / var(--tw-text-opacity, 1));
}
#root .text-muted-foreground {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-secondary-text) / var(--tw-text-opacity, 1));
}
#root .text-primary {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-primary) / var(--tw-text-opacity, 1));
}
#root .text-primary-foreground {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-surface) / var(--tw-text-opacity, 1));
}
#root .text-secondary-foreground {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-foreground) / var(--tw-text-opacity, 1));
}
#root .text-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
#root .underline-offset-4 {
  text-underline-offset: 4px;
}
#root .opacity-50 {
  opacity: 0.5;
}
#root .shadow-none {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
#root .shadow-sm {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
#root .shadow-black\/5 {
  --tw-shadow-color: rgb(0 0 0 / 0.05);
  --tw-shadow: var(--tw-shadow-colored);
}
#root .outline-none {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
#root .outline {
  outline-style: solid;
}
#root .filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
#root .transition-\[color\2c box-shadow\] {
  transition-property: color,box-shadow;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
#root .transition-all {
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
#root .transition-colors {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
#root .ease-in {
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
}
:root{font-family:"PingFang SC","Microsoft YaHei",sans-serif;color:rgb(var(--ds-primary));background:rgb(var(--ds-canvas));font-synthesis:none}*{box-sizing:border-box}body{margin:0}button,input{font:inherit}button{cursor:pointer;color:inherit}button:disabled{cursor:wait;opacity:.5}button:focus-visible,input:focus-visible{outline:2px solid rgb(var(--ds-primary));outline-offset:4px}button, input[type=checkbox], input[type=range]{touch-action:manipulation}button svg{flex-shrink:0}#root [role=button]{min-height:44px}#root [role=button] [dir]{font-family:inherit}h1,h2,h3,p{margin:0}.muted{color:rgb(var(--ds-secondary-text));line-height:1.8}.app{min-height:100dvh}.library-header{height:88px;padding:0 5%;display:flex;align-items:center;gap:24px;border-bottom:1px solid rgb(var(--ds-border))}.brand{display:flex;gap:12px;align-items:center}.brand strong{font-size:19px;font-weight:650;letter-spacing:2px}.edition{margin-left:auto;font-size:13px;color:rgb(var(--ds-secondary-text))}.library-content{max-width:1160px;margin:auto;padding:50px 5% 35px}.library-heading{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:30px}.eyebrow{font-size:10px;color:rgb(var(--ds-secondary-text));letter-spacing:2.4px;font-weight:600;margin-bottom:12px}h1{font-size:34px;font-weight:600;letter-spacing:1px}.library-heading h1{margin-bottom:10px}.library-heading h1 span{font-size:17px;color:rgb(var(--ds-subtle-text));letter-spacing:0}.search{display:flex;align-items:center;gap:12px;padding:0 16px;height:50px;background:rgb(var(--ds-muted));border-radius:13px;color:rgb(var(--ds-secondary-text))}.search input{background:transparent;border:0;outline:0;width:100%;color:rgb(var(--ds-primary))}.section-label{display:flex;justify-content:space-between;margin:30px 0 18px;font-size:14px}.section-label span:last-child{font-size:12px;color:rgb(var(--ds-subtle-text))}.score-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.score-card-link{border:0;background:none;text-align:left;padding:0;border-radius:16px;box-shadow:0 4px 20px rgb(var(--ds-overlay) / 0.02)}.cover{min-height:272px;position:relative;padding:25px 28px;background:rgb(var(--ds-border));color:rgb(var(--ds-primary));display:flex;flex-direction:column;overflow:hidden}.cover-1{background:rgb(var(--ds-border));color:rgb(var(--ds-primary))}.cover-2{background:rgb(var(--ds-border));color:rgb(var(--ds-primary))}.cover-top{display:flex;justify-content:space-between;font-size:9px;letter-spacing:2px;opacity:.65}.cover-title{font-family:"Songti SC","SimSun",serif;font-size:37px;letter-spacing:7px;margin:37px 0 30px;position:relative;z-index:1}.cover-lines{height:40px;background:repeating-linear-gradient(to bottom,transparent 0,transparent 8px,currentColor 8px,currentColor 9px);opacity:.25;position:absolute;left:56%;right:-25px;top:139px;transform:rotate(-12deg)}.cover-lines svg{background:inherit;position:absolute;top:-10px;left:40px}.cover-bottom{margin-top:auto;font-size:11px;letter-spacing:1px;opacity:.7}.card-info{display:flex;align-items:center;justify-content:space-between;padding:22px 24px;background:rgb(var(--ds-surface))}.card-info h2{font-size:18px;font-weight:600;margin-bottom:7px}.card-info p{font-size:12px;color:rgb(var(--ds-secondary-text))}.library-footnote{text-align:center;margin-top:48px;color:rgb(var(--ds-subtle-text));font-size:12px}.empty{padding:40px 0;color:rgb(var(--ds-secondary-text))}.feedback{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);max-width:90vw;background:rgb(var(--ds-primary));color:rgb(var(--ds-surface));padding:14px 20px;border-radius:12px;font-size:13px;z-index:20;display:flex;gap:16px}.feedback button{background:none;border:0;color:rgb(var(--ds-surface))}input[type=range]::-webkit-slider-thumb{cursor:pointer}
@media(min-width:1100px){.score-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.cover{min-height:300px}}
@media(max-width:600px){.library-header{height:70px}.edition{display:none}.library-header>[role=button]{margin-left:auto}.library-content{padding-top:30px}.library-heading h1{font-size:29px}.library-heading .muted{font-size:12px}.score-grid{gap:15px}.cover{padding:18px;min-height:225px}.cover-title{font-size:28px;letter-spacing:3px}.cover-top{font-size:7px;letter-spacing:1px}.cover-bottom{font-size:9px}.card-info{padding:17px 14px}.card-info p{font-size:10px;line-height:1.7}.card-info h2{font-size:16px}.section-label span:last-child{font-size:10px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* Document-first interface: neutral surfaces, monochrome actions, compact chrome. */
:root{color:rgb(var(--ds-primary));background:rgb(var(--ds-canvas))}
.library-header{height:64px;padding:0 32px;background:rgb(var(--ds-surface));border-color:rgb(var(--ds-border))}
.brand strong{font-size:17px;font-weight:600;letter-spacing:0}
.brand svg{color:rgb(var(--ds-primary))}
.library-header>[role=button]{margin-left:auto}
.library-content{max-width:1200px;padding:30px 32px}
.library-heading{margin-bottom:20px}
.library-heading h1{font-size:28px;letter-spacing:0;margin:0}
.search{background:rgb(var(--ds-muted));height:44px;border-radius:10px;margin-bottom:28px;color:rgb(var(--ds-subtle-text))}
.search input{color:rgb(var(--ds-primary))}
.score-grid{grid-template-columns:repeat(auto-fill,minmax(180px,220px));gap:28px}
.score-card-link{box-shadow:none;border-radius:8px}
#root .score-card-link>div{background:transparent;border-radius:8px}
.cover{min-height:0;aspect-ratio:3/4;padding:22px;background:rgb(var(--ds-muted));color:rgb(var(--ds-primary));border:1px solid rgb(var(--ds-border));border-radius:5px;box-shadow:2px 3px 6px rgb(var(--ds-overlay) / 0.051)}
.cover-1{background:rgb(var(--ds-muted));color:rgb(var(--ds-primary));border-color:rgb(var(--ds-border))}
.cover-2{background:rgb(var(--ds-border));color:rgb(var(--ds-primary));border-color:rgb(var(--ds-border))}
.cover-title{font-size:28px;letter-spacing:3px;margin:26px 0 0}
.cover-lines{top:62%;left:24%;opacity:.17;transform:none}
.card-info{padding:13px 2px;background:transparent;align-items:flex-start}
.card-info h2{font-size:15px;margin-bottom:5px;font-weight:500}
.card-info p{font-size:12px;color:rgb(var(--ds-subtle-text));line-height:1.5}
.card-info>svg{display:none}
.feedback{background:rgb(var(--ds-primary))}
@media(max-width:600px){.library-header{padding:0 20px}.library-content{padding:24px 20px}.library-heading h1{font-size:25px}.score-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.cover{padding:16px}.cover-title{font-size:24px;letter-spacing:1px}}

/* Shared component metrics and monochrome states. */
:root{font-family:var(--ds-font)}
#root [role=button]{min-height:var(--ds-touch);border-radius:var(--ds-radius-control)}
.cover,.cover-1,.cover-2{background:rgb(var(--ds-cover));color:rgb(var(--ds-foreground));border-color:rgb(var(--ds-border))}
button:focus-visible,input:focus-visible{outline-color:rgb(var(--ds-primary))}

/* A single surface unites the abstract artwork and score metadata. */
.score-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:24px;max-width:1000px}
#root .score-card-link>div{background:rgb(var(--ds-surface));border:1px solid rgb(var(--ds-border));border-radius:14px;box-shadow:0 2px 6px rgb(var(--ds-overlay)/.025);overflow:hidden}
.score-card-link .cover{aspect-ratio:16/10;border:0;border-radius:0;box-shadow:none;position:relative;overflow:hidden}
.score-card-link .abstract-cover{padding:0;background:rgb(var(--ds-muted));color:rgb(var(--ds-primary)/.65)}
.abstract-cover svg{display:block;position:absolute;inset:0;width:100%;height:100%}
.score-card-link .card-info{padding:18px 20px 20px;margin:0;min-height:94px}.score-card-link .card-info h2{font-weight:600}.score-card-link .card-info p{margin-top:6px}
@media(max-width:600px){.score-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.score-card-link .card-info{padding:14px;min-height:88px}}

/* Geometric cover family: shared palette, distinct stable compositions. */
.abstract-cover .geometry-ink{fill:rgb(var(--ds-primary))}
.abstract-cover .geometry-mid{fill:rgb(var(--ds-primary)/.4)}
.abstract-cover .geometry-soft{fill:rgb(var(--ds-primary)/.12)}
.abstract-cover .geometry-paper{fill:rgb(var(--ds-muted))}
.abstract-cover .geometry-line{fill:none;stroke:rgb(var(--ds-primary));stroke-width:2}

.loop-controls{margin-top:24px}
.loop-range{display:flex;align-items:end;gap:12px;margin:12px 0}
.loop-range label{display:flex;flex:1;min-width:0;flex-direction:column;gap:8px;font-size:14px}
.loop-range input{width:100%;height:44px;border:1px solid #ddd;border-radius:8px;background:#fff;padding:8px 12px;font:inherit}
.loop-range>span{align-self:center;padding-top:26px;color:#737373}
.loop-apply,.loop-stop{min-height:44px;border:0;border-radius:8px;padding:10px 16px;font:inherit;cursor:pointer}
.loop-apply{color:#fff;background:#181818;width:100%}
.loop-apply:disabled{opacity:.4;cursor:default}
.loop-stop{margin-top:8px;width:100%;background:#f0f0f0}

.site-filing{padding:24px 12px;text-align:center;font-size:12px;line-height:1.5;color:#666}.site-filing a{color:inherit;text-decoration:none}.site-filing a:hover{text-decoration:underline}.site-filing a:focus-visible{outline:2px solid currentColor;outline-offset:4px}

/* Canonical workspace layout. Do not duplicate these rules in styles.css. */
.reading {
  height: 100dvh;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.score-engine { width: 100%; flex: 1; min-height: 0; border: 0; background: rgb(var(--ds-muted)); }
.staff-mask { position: absolute; z-index: 3; background: #fff; pointer-events: none; }
.sheet {
  position: fixed;
  inset: calc(var(--ds-header-height) + var(--ds-toolbar-height) + var(--ds-space-2) + env(safe-area-inset-top)) var(--ds-gutter) auto auto;
  margin: 0;
  padding: 0;
  width: min(var(--ds-panel-width), calc(100vw - 2 * var(--ds-gutter)));
  max-height: calc(100dvh - var(--ds-header-height) - var(--ds-toolbar-height) - 32px - env(safe-area-inset-top));
  overflow-y: auto;
  overscroll-behavior: contain;
  border: 1px solid rgb(var(--ds-border));
  border-radius: var(--ds-radius-panel);
  background: rgb(var(--ds-surface));
  color: rgb(var(--ds-foreground));
  box-shadow: 0 12px 44px rgb(var(--ds-overlay) / .14);
}
.sheet::backdrop { background: rgb(var(--ds-overlay) / .09); }
.sheet-head {
  position: sticky; top: 0; z-index: 2;
  display: grid; grid-template-columns: minmax(0, 1fr) auto;
  align-items: center; gap: var(--ds-space-4);
  min-height: var(--ds-header-height);
  padding: var(--ds-space-3) var(--ds-space-6);
  border-bottom: 1px solid rgb(var(--ds-border));
  background: rgb(var(--ds-surface));
}
.sheet-content { display: flex; flex-direction: column; padding: var(--ds-space-6); gap: var(--ds-space-6); }
.sheet h3 { color: rgb(var(--ds-secondary-text)); margin: 0 0 var(--ds-space-2); }
.part-row { display: grid; gap: 0; padding: var(--ds-space-1) 0; }
.part-card-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; }
.part-card { padding: 6px 10px; border: 1px solid rgb(var(--ds-border)); border-radius: 14px; background: rgb(var(--ds-canvas)); gap: 4px; }
.part-card .sound-toggle { min-height: 36px; }
.part-card .volume input { height: 24px; }
.part-card:has(.sound-toggle input:not(:checked)) { padding-block: 6px; gap: 0; }
.check-label { display: flex; align-items: center; gap: var(--ds-space-3); min-height: var(--ds-touch); }
.check-label input { width: 20px; height: 20px; margin: 0; accent-color: rgb(var(--ds-primary)); }
.volume { display: grid; grid-template-columns: minmax(0, 1fr) 48px; align-items: center; gap: var(--ds-space-3); }
.volume input { min-width: 0; width: 100%; height: var(--ds-touch); margin: 0; accent-color: rgb(var(--ds-primary)); }
.volume output { text-align: right; color: rgb(var(--ds-secondary-text)); }
.visibility-row, .setting-line { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--ds-space-4); min-height: var(--ds-setting-height); }
.sound-toggle input, .visibility-row input, .setting-line>input { appearance: none; position: relative; width: 44px; height: 28px; margin: 0; border: 0; border-radius: 14px; background: rgb(var(--ds-strong-border)); cursor: pointer; }
.sound-toggle input:before, .visibility-row input:before, .setting-line>input:before { content: ''; position: absolute; width: 22px; height: 22px; left: 3px; top: 3px; border-radius: 50%; background: rgb(var(--ds-surface)); transition: transform .15s; }
.sound-toggle input:checked, .visibility-row input:checked, .setting-line>input:checked { background: rgb(var(--ds-primary)); }
.sound-toggle input:checked:before, .visibility-row input:checked:before, .setting-line>input:checked:before { transform: translateX(16px); }
.stepper { display: grid; grid-template-columns: 44px 48px 44px; align-items: center; text-align: center; }
.speed-options { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--ds-space-2); }
.tempo-options { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; }
.tempo-option { display: flex; min-width: 0; flex-direction: column; align-items: center; justify-content: center; gap: 1px; padding-inline: 2px!important; white-space: nowrap; }
.tempo-option small { font-size: 11px; opacity: .68; }
#root .speed-options [role=button] { padding-inline: var(--ds-space-1); }
.loop-inputs { display: grid; grid-template-columns: minmax(0, 1fr) 16px minmax(0, 1fr); gap: var(--ds-space-3); align-items: end; }
.loop-inputs>span { align-self: end; line-height: var(--ds-touch); text-align: center; }
.loop-inputs label { display: grid; gap: var(--ds-space-2); color: rgb(var(--ds-secondary-text)); }
.loop-inputs input { width: 100%; min-width: 0; height: var(--ds-touch); padding: var(--ds-space-2) var(--ds-space-3); border: 1px solid rgb(var(--ds-border)); border-radius: var(--ds-radius-control); background: rgb(var(--ds-surface)); color: rgb(var(--ds-foreground)); }
.import-zone { display: flex; flex-direction: column; align-items: center; gap: var(--ds-space-4); padding: 32px var(--ds-space-4); border: 1px solid rgb(var(--ds-border)); border-radius: var(--ds-radius-control); background: rgb(var(--ds-canvas)); }
.panel-intro, .import-zone span { color: rgb(var(--ds-secondary-text)); }
.error { color: rgb(var(--ds-foreground)); }
/* Typography is explicit, including React Native Web's generated Text elements. */
.reading, .sheet, #root .reading [role=button], #root .sheet [role=button], #root .reading [dir], #root .sheet [dir] {
  font-family: var(--ds-font);
  font-size: var(--ds-type-body);
  line-height: var(--ds-line-body);
  font-weight: var(--ds-weight-regular);
  letter-spacing: 0;
}
.reader-title h1, .sheet-head h2 { margin: 0; font-family: var(--ds-font); font-size: var(--ds-type-title); line-height: var(--ds-line-title); font-weight: var(--ds-weight-heading); letter-spacing: 0; }
#root .reading [role=button] [dir], #root .sheet [role=button] [dir], .follow, .sheet h3, .loop-inputs label { font-size: var(--ds-type-label); line-height: var(--ds-line-label); font-weight: var(--ds-weight-medium); }
.reader-title span, .volume output, .panel-intro, .import-zone span, .error { font-size: var(--ds-type-caption); line-height: var(--ds-line-caption); font-weight: var(--ds-weight-regular); }
.reader-title span, .volume output, .stepper, .speed-options, .loop-inputs input { font-variant-numeric: tabular-nums; }
.sheet input { font-family: var(--ds-font); font-size: var(--ds-type-body); line-height: var(--ds-line-body); }
.reading svg, .sheet-head svg { width: 20px; height: 20px; }
@media(max-width:600px) {
  .reading { --ds-gutter: 12px; }
  .tempo-options { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  #root .tool-strip [role=button] { padding-inline: 4px; gap: 4px; }
  .sheet { inset: auto 0 0; width: 100%; max-width: 100vw; max-height: 82dvh; border-radius: var(--ds-radius-panel) var(--ds-radius-panel) 0 0; padding-bottom: env(safe-area-inset-bottom); }
  .sheet-content:has(.part-card-grid) { gap: 10px; padding: 12px 14px; }
  .part-card { padding-inline: 8px; }
  .part-card:has(.sound-toggle input:not(:checked)) { padding-block: 6px; }
}
@media(prefers-reduced-motion:reduce) { .sheet * { transition: none!important; } }

.tool-trigger{gap:8px!important}.tool-trigger[aria-expanded=true] svg{color:rgb(var(--ds-surface))}
@media(max-width:600px){.tool-strip{justify-content:start}.reader-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}

.tool-strip [aria-pressed=true] svg{color:rgb(var(--ds-surface))}

.tool-strip{overflow-y:hidden;scrollbar-width:none}.tool-strip::-webkit-scrollbar{display:none}

/* Opening a document keeps one stable paper surface, then crossfades to notation. */
.score-stage{position:relative;flex:1;min-height:0;overflow:hidden;background:rgb(var(--ds-muted))}
.score-stage>.score-engine{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none;transition:opacity .32s ease}
.score-stage.is-ready>.score-engine{opacity:1;pointer-events:auto}
.score-transition{position:absolute;inset:0;padding:16px 24px;overflow:hidden;opacity:1;visibility:visible;transition:opacity .28s ease,visibility 0s .28s}
.is-ready>.score-transition{opacity:0;visibility:hidden;pointer-events:none}
.score-skeleton{max-width:1100px;min-height:1100px;margin:auto;padding:64px 8%;background:rgb(var(--ds-surface));animation:paper-arrive .3s ease-out both}
.skeleton-title{width:128px;height:22px;margin:0 auto 24px;border-radius:4px;background:rgb(var(--ds-primary)/.09)}
.skeleton-credit{width:100px;height:8px;margin:0 0 68px auto;border-radius:4px;background:rgb(var(--ds-primary)/.05)}
.skeleton-staff{display:grid;grid-template-columns:20px 1fr;align-items:center;gap:24px;height:100px;margin-bottom:22px;opacity:.6;animation:staff-breathe 1.8s ease-in-out infinite}
.skeleton-staff:nth-child(even){animation-delay:.18s}
.skeleton-staff i{height:10px;border-radius:3px;background:rgb(var(--ds-primary)/.12)}
.skeleton-staff span{height:33px;background:repeating-linear-gradient(to bottom,rgb(var(--ds-primary)/.09) 0 1px,transparent 1px 8px)}
.score-loading-label{position:absolute;left:50%;top:36%;transform:translate(-50%,-50%);display:flex;align-items:center;gap:12px;max-width:85%;padding:16px 22px;border-radius:14px;background:rgb(var(--ds-surface));box-shadow:0 4px 28px rgb(var(--ds-overlay)/.05);font-size:14px;line-height:22px;color:rgb(var(--ds-secondary-text))}
.loading-beats{display:flex;align-items:center;gap:3px;height:20px}.loading-beats i{width:3px;height:14px;border-radius:2px;background:rgb(var(--ds-primary));animation:loading-beat 1s ease-in-out infinite}.loading-beats i:nth-child(2){animation-delay:.12s}.loading-beats i:nth-child(3){animation-delay:.24s}.loading-beats i:nth-child(4){animation-delay:.36s}
@keyframes loading-beat{0%,100%{transform:scaleY(.4);opacity:.4}50%{transform:scaleY(1);opacity:1}}
@keyframes staff-breathe{0%,100%{opacity:.45}50%{opacity:.85}}
@keyframes paper-arrive{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:600px){.score-transition{padding:16px 8px}.score-skeleton{padding:48px 7%}.score-loading-label{white-space:nowrap}}
@media(prefers-reduced-motion:reduce){.score-stage *{animation:none!important;transition:none!important}}

/* Library actions and shared 44px controls. */
.library-content{max-width:none;width:100%;padding:32px}
.score-grid{max-width:none;width:100%;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:24px}
.score-card-shell{position:relative;min-width:0}
.score-card-link{display:block;width:100%}
.score-card-link .card-info{padding:24px 64px 24px 24px;min-height:104px}
.card-info h2{overflow-wrap:anywhere}
.card-info p{font-size:12px;line-height:1.6}
.card-more{position:absolute;right:12px;bottom:48px;z-index:3}
.card-more[open]{z-index:5}
.card-more summary{display:flex;align-items:center;justify-content:center;width:44px;height:44px;list-style:none;border-radius:10px;cursor:pointer;background:rgb(var(--ds-surface))}
.card-more summary::-webkit-details-marker{display:none}
.card-more summary:hover,.card-more[open] summary{background:rgb(var(--ds-muted))}
.card-more summary:focus-visible{outline:2px solid rgb(var(--ds-primary));outline-offset:2px}
.card-menu{position:absolute;right:0;top:48px;min-width:160px;padding:8px;background:rgb(var(--ds-surface));border:1px solid rgb(var(--ds-border));border-radius:12px;box-shadow:0 8px 24px rgb(var(--ds-overlay)/.12)}
.card-menu button{display:flex;align-items:center;gap:12px;width:100%;min-height:44px;border:0;border-radius:8px;padding:0 12px;background:none;text-align:left}
.card-menu button:hover{background:rgb(var(--ds-muted))}
.import-anchor{position:relative}
.sheet.import-popover{position:fixed;inset:auto 32px auto auto;width:min(368px,calc(100vw - 32px));max-height:calc(100dvh - 160px);z-index:15;border-radius:16px;padding-bottom:0}
.play-time{font-size:14px;line-height:20px;white-space:nowrap;font-variant-numeric:tabular-nums;color:rgb(var(--ds-secondary-text))}
#root .reader-header [role=button]{width:44px;height:44px;min-height:44px;padding:0;flex-shrink:0}
#root .reader-header svg,#root .tool-strip svg{width:20px!important;height:20px!important}
.tool-strip{justify-content:center}
.delete-dialog{width:min(400px,calc(100vw - 32px));margin:auto;border:1px solid rgb(var(--ds-border));border-radius:20px;padding:24px;color:rgb(var(--ds-foreground));background:rgb(var(--ds-surface));box-shadow:0 20px 64px rgb(var(--ds-overlay)/.16)}
.delete-dialog::backdrop{background:rgb(var(--ds-overlay)/.25)}
.delete-dialog h2{font-size:20px;line-height:1.5;overflow-wrap:anywhere}
.delete-dialog p{font-size:14px;line-height:1.8;color:rgb(var(--ds-secondary-text));margin-top:12px}
.delete-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}
@media(max-width:600px){.library-content{padding:24px 16px}.score-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.score-card-link .card-info{padding:16px 52px 16px 16px;min-height:104px}.card-more{right:4px;bottom:44px}.play-time{font-size:12px}.reader-actions{gap:8px}.tool-strip{justify-content:start}.sheet.import-popover{max-height:calc(100dvh - 160px)}}

.part-identity { display: flex; align-items: center; gap: 8px; min-width: 0; font-size:18px; line-height:28px; }
.part-abbreviation { flex: 0 0 32px; width: 32px; color: rgb(var(--ds-secondary-text)); font-size: 16px; font-weight: 600; }


.mode-tabs { display:flex; gap:4px; padding:3px; border-radius:12px; background:rgb(var(--ds-muted)); }
.mode-tabs button { display:flex; align-items:center; justify-content:center; gap:8px; height:44px; padding:0 14px; border:0; border-radius:9px; background:transparent; color:rgb(var(--ds-secondary-text)); font:inherit; font-size:14px; white-space:nowrap; cursor:pointer; }
.mode-tabs button[aria-selected=true] { background:rgb(var(--ds-primary)); color:rgb(var(--ds-surface)); }
.mode-tabs button:focus-visible { outline:2px solid rgb(var(--ds-primary)); outline-offset:2px; }
.mode-tabs button:disabled { opacity:.4; cursor:default; }
/* A centered title row and a separate, responsive practice toolbar. */
.reader-header{flex:none;padding:env(safe-area-inset-top) max(24px,env(safe-area-inset-right)) 0 max(24px,env(safe-area-inset-left));background:rgb(var(--ds-surface));border-bottom:1px solid rgb(var(--ds-border))}
.reader-heading{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;gap:16px;min-height:64px}
.reader-title{min-width:0;text-align:center}
.reader-title h1{font-size:26px;line-height:34px;letter-spacing:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:12px 0}
.reader-toolbar{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-items:center;gap:12px 12px;padding:12px 0 16px;border-top:1px solid rgb(var(--ds-border))}
.reader-toolbar[hidden]{display:none}
.reader-actions{display:flex;align-items:center;gap:12px;flex-shrink:0;padding:2px 14px 2px 2px;border-radius:12px;background:rgb(var(--ds-muted))}
.reader-toolbar>.tool-strip{display:flex;align-items:center;gap:8px;min-width:0;margin-left:auto}
#root .reader-toolbar .tool-strip [role=button]{width:auto;padding:0 12px}
.reader-toolbar .tool-strip [dir]{white-space:nowrap}
.reading .sheet{top:calc(var(--reader-height, 141px) + 12px);max-height:calc(100dvh - var(--reader-height, 141px) - 36px)}
.library{--library-gutter:32px;--library-gap:24px}
.library-header{padding-inline:var(--library-gutter)}
.library-header>.library-heading-actions{display:flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0}
.library-content{padding:32px var(--library-gutter)}
.library-heading,.search{margin-bottom:var(--library-gap)}
.library-heading{flex-wrap:wrap;gap:16px}
.library-heading h1 span{font-size:18px;color:rgb(var(--ds-secondary-text));font-weight:400}
.library-view-tabs{display:flex;gap:4px;padding:4px;border-radius:12px;background:rgb(var(--ds-muted));margin-left:auto}
.library-view-tabs button{display:flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:8px;padding:0 14px;min-height:44px;background:transparent;color:rgb(var(--ds-secondary-text));font-size:14px}
.library-view-tabs button[aria-selected=true]{background:rgb(var(--ds-surface));color:rgb(var(--ds-primary));box-shadow:0 1px 4px rgb(var(--ds-overlay)/.08)}
.score-grid{gap:var(--library-gap);align-items:start}
.score-list{grid-template-columns:minmax(0,1fr);gap:8px}
#root .score-list .score-card-link>div{display:flex;flex-direction:row;align-items:center}
.score-list .score-card-link .cover{width:72px;align-self:stretch;aspect-ratio:auto;flex-shrink:0}
.score-list .score-card-link .card-info{min-height:76px;padding:12px 56px 12px 16px;flex:1;min-width:0}
.score-list .card-more{top:16px;right:8px;bottom:auto}
@media(max-width:700px){
 .reader-header{padding-inline:16px}.reader-toolbar{gap:8px 12px;padding-bottom:12px}.reader-toolbar .mode-tabs button{padding-inline:10px}.reader-title h1{font-size:24px}
 .reading .sheet{inset:auto 0 0;max-height:82dvh}
}
@media(max-width:600px){
 .library{--library-gutter:16px;--library-gap:16px}.library-content{padding-top:24px}.library-heading h1 span{font-size:15px}.library-heading>div:first-child{flex:1}.library-view-tabs{order:3;width:100%;margin:0}.library-view-tabs button{flex:1}.score-grid:not(.score-list){grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.score-list .score-card-link .cover{width:64px}
}

/* Shared sliding selection and reversible playback fade. */
.reader-toolbar>.mode-tabs { position:relative; display:grid; grid-template-columns:repeat(2,1fr); gap:0; padding:2px; isolation:isolate; }
.reader-toolbar>.mode-tabs::before { content:""; position:absolute; z-index:-1; left:2px; top:2px; bottom:2px; width:calc((100% - 4px)/2); border-radius:9px; background:rgb(var(--ds-primary)); transform:translateX(0); transition:transform 240ms cubic-bezier(.22,1,.36,1); }
.reader-toolbar>.mode-tabs.is-listening::before { transform:translateX(100%); }
.reader-toolbar>.mode-tabs button { background:transparent; transition:color 180ms ease; }
.reader-toolbar>.reader-actions { opacity:1; visibility:visible; transition:opacity 220ms ease,visibility 0s linear; }
.reader-toolbar>.reader-actions.is-hidden { opacity:0; visibility:hidden; pointer-events:none; transition:opacity 220ms ease,visibility 0s linear 220ms; }
@media(prefers-reduced-motion:reduce){.reader-toolbar>.mode-tabs::before,.reader-toolbar>.mode-tabs button,.reader-toolbar>.reader-actions,.reader-toolbar>.reader-actions.is-hidden{transition:none}}

/* Keep only the group boundary between staff visibility and page sizing. */
.visibility-list + .setting-line{border-top:1px solid rgb(var(--ds-border));padding-top:16px}
/* Touch-first app controls retain pressed/selected states without focus rings. */
#root :focus, #root :focus-visible{outline:none!important;--tw-ring-shadow:0 0 #0000;--tw-ring-offset-shadow:0 0 #0000}
#root button,#root [role=button],#root input,#root summary{-webkit-tap-highlight-color:transparent}

#root [role=button]{outline:none!important;box-shadow:none!important}

/* Title uses the existing Harmony theme; practice controls remain on white. */
.reader-header{--reader-gutter:24px;padding:env(safe-area-inset-top) 0 0;background:rgb(var(--ds-surface))}
.reader-heading{padding:env(safe-area-inset-top) max(var(--reader-gutter),env(safe-area-inset-right)) 0 max(var(--reader-gutter),env(safe-area-inset-left));background:rgb(var(--ds-primary));color:rgb(var(--ds-surface));min-height:calc(64px + env(safe-area-inset-top))}
#root .reader-heading [role=button]{background:rgb(var(--ds-surface)/.12);color:rgb(var(--ds-surface))}
.reader-toolbar{padding-inline:var(--reader-gutter)}
.sound-toggle{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:44px}
.volume input[type=range]{appearance:none;-webkit-appearance:none;background:transparent;border:0;box-shadow:none;padding:0}
.volume input[type=range]::-webkit-slider-runnable-track{height:6px;border:0;border-radius:3px;background:linear-gradient(to right,rgb(var(--ds-primary)) var(--volume),rgb(var(--ds-border)) var(--volume))}
.volume input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:18px;height:18px;margin-top:-6px;border:0;border-radius:50%;background:rgb(var(--ds-primary));box-shadow:none}
.volume input[type=range]::-moz-range-track{height:6px;border:0;border-radius:3px;background:rgb(var(--ds-border))}
.volume input[type=range]::-moz-range-progress{height:6px;border-radius:3px;background:rgb(var(--ds-primary))}
.volume input[type=range]::-moz-range-thumb{width:18px;height:18px;border:0;border-radius:50%;background:rgb(var(--ds-primary))}
.score-transition{padding:16px 24px}
.score-skeleton{max-width:1000px;min-height:0;margin:auto;padding:0;animation:none}
.reading .skeleton-notation{display:block;width:100%;height:auto;color:rgb(var(--ds-primary))}
.score-loading-label{position:fixed;left:50%;top:50%;bottom:auto;transform:translate(-50%,-50%);flex-direction:column;gap:20px;padding:28px 36px;font-size:18px;line-height:28px;white-space:nowrap;border-radius:20px;box-shadow:0 6px 32px rgb(var(--ds-overlay)/.08)}
.loading-spinner{width:44px;height:44px;border:3px solid rgb(var(--ds-primary)/.15);border-top-color:rgb(var(--ds-primary));border-radius:50%;animation:loading-spin .8s linear infinite}
@keyframes loading-spin{to{transform:rotate(360deg)}}
@media(max-width:850px){.score-transition{padding-inline:16px}}
@media(max-width:700px){.reader-header{--reader-gutter:16px}.reader-toolbar{padding-inline:var(--reader-gutter)}}
@media(max-width:600px){.score-transition{padding-inline:10px}}

/* Shared motion rhythm for disclosure, panels and controls. */
:root{--motion-duration:240ms;--motion-easing:cubic-bezier(.22,1,.36,1)}
.reader-heading{grid-template-columns:44px minmax(0,1fr) 44px;padding-top:16px;padding-bottom:16px;min-height:76px}
.library-header{height:calc(64px + env(safe-area-inset-top));padding-top:env(safe-area-inset-top)}
.library-header .brand strong{font-size:22px}
.reader-heading>[role=button]:first-child{justify-self:start}
.heading-reveal{display:grid;grid-template-rows:1fr;opacity:1;transition:grid-template-rows var(--motion-duration) var(--motion-easing),opacity var(--motion-duration) ease}
.heading-reveal.is-collapsed{grid-template-rows:0fr;opacity:0}
.heading-clip{min-height:0;overflow:hidden}
.sheet[open],.delete-dialog[open]{animation:surface-enter var(--motion-duration) var(--motion-easing)}
.sheet[open]::backdrop,.delete-dialog[open]::backdrop{animation:backdrop-enter var(--motion-duration) ease}
.card-more[open] .card-menu,.feedback{animation:surface-enter var(--motion-duration) var(--motion-easing)}
.library-view-tabs button,.sound-toggle input,.visibility-row input,.setting-line>input{transition:background-color var(--motion-duration) ease,color var(--motion-duration) ease}
.sound-toggle input:before,.visibility-row input:before,.setting-line>input:before{transition:transform var(--motion-duration) var(--motion-easing)}
@keyframes surface-enter{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes backdrop-enter{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.heading-reveal{transition:none}.sheet[open],.delete-dialog[open],.sheet::backdrop,.delete-dialog::backdrop,.card-menu,.feedback{animation:none!important}}

/* Compact metadata and a left-aligned library heading. */
.score-grid:not(.score-list) .score-card-link .card-info{padding:16px 56px 16px 16px;min-height:88px}
.score-grid:not(.score-list) .card-more{right:8px;bottom:36px}
.library-heading{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px}
.library-heading>div:first-child{grid-column:1;text-align:left}
.library-heading h1{display:flex;align-items:center;justify-content:flex-start;white-space:nowrap}
.library-heading-actions{display:contents}
.library-view-tabs{margin-left:0;flex-shrink:0}
/* Keep the title and view tabs together, including narrow iPad split views. */
.library-heading:has(.import-anchor){grid-template-columns:minmax(0,1fr) auto auto}
.library-heading-actions .library-view-tabs{grid-column:2;grid-row:1;justify-self:end;width:auto;order:0}
.library-heading-actions .import-anchor{grid-column:3;grid-row:1;justify-self:end}
#root .score-card-link>div{box-shadow:none}
#root .score-list .score-card-link>div{border-radius:8px}
@media(max-width:600px){
 .library-heading,.library-heading:has(.import-anchor){grid-template-columns:minmax(0,1fr) auto;gap:12px 8px}
 .library-heading-actions .import-anchor{grid-column:1 / -1;grid-row:2}
 .library-view-tabs button{padding-inline:10px;gap:6px}
}

/* List view is a flat sequence of rows, not a stack of cards. */
.score-grid.score-list{gap:0}
#root .score-list .score-card-link>div{background:transparent;border:0;border-radius:0;box-shadow:none}
.score-list .score-card-link{border-radius:0;box-shadow:none}
.score-list .score-card-shell{padding-block:8px;border-bottom:1px solid rgb(var(--ds-border))}
.score-list .score-card-shell:last-child{border-bottom:0}
.score-list .score-card-link .cover{width:56px;height:56px;align-self:center;border-radius:4px}
.score-list .score-card-link .card-info{min-height:64px;padding:8px 56px 8px 16px;background:transparent}
.score-list .card-more{top:18px;right:0}
.score-list .card-more summary{background:transparent}

.score-grid.score-list{gap:12px}
.score-list .score-card-shell{border:0}
/* Non-modal anchored tool popovers: transparent outside click surface, visible arrow. */
.popover-dismiss{position:fixed;inset:var(--reader-height,168px) 0 0;z-index:29;background:transparent}
#root .sheet.anchored-popover{position:fixed;inset:auto;z-index:30;overflow:visible;max-height:none;padding:0;margin:0;border-radius:16px;box-shadow:0 8px 28px rgb(var(--ds-overlay)/.13)}
.anchored-popover::before{content:'';position:absolute;left:var(--popover-arrow-x,50%);top:-7px;width:12px;height:12px;transform:translateX(-50%) rotate(45deg);background:rgb(var(--ds-surface));border-left:1px solid rgb(var(--ds-border));border-top:1px solid rgb(var(--ds-border));z-index:3}
.sheet-content:has(.part-card-grid){gap:10px;padding:12px 16px}
.sheet-content:has(.part-card-grid) section h3{margin-bottom:4px}
.popover-scroll{max-height:var(--popover-max-height,70dvh);overflow-y:auto;overscroll-behavior:contain;border-radius:inherit}
.sound-popover .popover-scroll{scrollbar-width:none}
.sound-popover .popover-scroll::-webkit-scrollbar{display:none}
#root .tool-strip [aria-expanded=true]{background:rgb(var(--ds-muted))}

/* Collapse only when the measured controls cannot fit, in priority order. */
.reader-toolbar>*{flex-shrink:0}
.reader-toolbar>.tool-strip{flex-shrink:0}
/* Density measurements must use final sizes, never an animated intermediate width. */
#root .reader-toolbar [role=button]{transition-property:background-color,color,border-color,box-shadow,opacity}
.play-time>span:not(.time-separator){display:inline-block;text-align:center}
#root .reader-toolbar:not([data-density=full]) .tool-label{display:none}
#root .reader-toolbar:not([data-density=full]) .tool-strip [role=button]{width:44px;min-width:44px;height:44px;padding:0;gap:0}
.reader-toolbar:not([data-density=full])>.tool-strip{gap:4px}
.reader-toolbar:is([data-density=modes],[data-density=time]) .mode-label{display:none}
.reader-toolbar:is([data-density=modes],[data-density=time]) .mode-tabs button{width:44px;min-width:44px;padding:0;gap:0}
.reader-toolbar[data-density=time] .reader-actions{padding-right:2px;gap:0}
.reader-toolbar[data-density=time] .play-time{display:none}
@media(max-width:540px){.reader-toolbar{gap:8px;padding-inline:12px}}
@media(max-width:359px){.library-header{gap:8px;padding-inline:12px}.reader-toolbar{gap:6px;padding-inline:8px}}

.cloud-gate{min-height:100dvh;display:grid;place-items:center;padding:24px;background:#f5f5f5}
.cloud-form{width:min(100%,400px);display:grid;gap:20px;padding:28px;background:white;border-radius:16px}
.cloud-form h2{font-size:24px;margin:0}.cloud-form p{font-size:14px;color:#666;line-height:1.6;margin:0}
.cloud-form label{display:grid;gap:8px;font-size:15px}.cloud-form input,.cloud-form select{width:100%;min-height:44px;padding:10px 12px;background:#f3f3f3;border:0;border-radius:8px;font-size:16px}
.cloud-form button{min-height:44px;padding:10px 16px;border:0;border-radius:8px;background:#191919;color:white;font-size:16px}.cloud-form button:disabled{opacity:.5}.cloud-form button[type=button]{background:#eee;color:#222}
.cloud-overlay{position:fixed;inset:0;z-index:100;background:#0004;overflow:auto}.cloud-account{text-align:center;padding:16px 24px 32px}.cloud-account button{border:0;background:transparent;color:#666;min-height:44px}.sync-status{font-size:13px;color:#666;margin:0 0 16px}
.app.reading~.cloud-account{display:none}

.offline-download{font:inherit;font-size:14px;padding:10px 14px;border:1px solid #dedede;border-radius:10px;background:#fff;cursor:pointer}.offline-download:disabled{opacity:.5;cursor:wait}#root .first\:mt-0:first-child {
  margin-top: 0px;
}#root .hover\:bg-accent:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-muted) / var(--tw-bg-opacity, 1));
}#root .hover\:bg-destructive\/90:hover {
  background-color: rgb(var(--ds-primary) / 0.9);
}#root .hover\:bg-primary\/90:hover {
  background-color: rgb(var(--ds-primary) / 0.9);
}#root .hover\:bg-secondary\/80:hover {
  background-color: rgb(var(--ds-muted) / 0.8);
}#root .hover\:underline:hover {
  text-decoration-line: underline;
}#root .focus-visible\:border-ring:focus-visible {
  --tw-border-opacity: 1;
  border-color: rgb(var(--ds-primary) / var(--tw-border-opacity, 1));
}#root .focus-visible\:ring-\[3px\]:focus-visible {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}#root .focus-visible\:ring-ring\/50:focus-visible {
  --tw-ring-color: rgb(var(--ds-primary) / 0.5);
}#root .active\:bg-accent:active {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-muted) / var(--tw-bg-opacity, 1));
}#root .active\:bg-destructive\/90:active {
  background-color: rgb(var(--ds-primary) / 0.9);
}#root .active\:bg-primary\/90:active {
  background-color: rgb(var(--ds-primary) / 0.9);
}#root .active\:bg-secondary\/80:active {
  background-color: rgb(var(--ds-muted) / 0.8);
}#root .disabled\:pointer-events-none:disabled {
  pointer-events: none;
}#root :is(.group:hover .group-hover\:text-accent-foreground) {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-foreground) / var(--tw-text-opacity, 1));
}#root :is(.group:hover .group-hover\:underline) {
  text-decoration-line: underline;
}#root :is(.group:active .group-active\:text-accent-foreground) {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-foreground) / var(--tw-text-opacity, 1));
}#root :is(.group:active .group-active\:underline) {
  text-decoration-line: underline;
}#root .has-\[\>svg\]\:px-2\.5:has(>svg) {
  padding-left: 0.625rem;
  padding-right: 0.625rem;
}#root .has-\[\>svg\]\:px-3:has(>svg) {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}#root .has-\[\>svg\]\:px-4:has(>svg) {
  padding-left: 1rem;
  padding-right: 1rem;
}@media (min-width: 640px) {

  #root .sm\:mt-6 {
    margin-top: 1.5rem;
  }

  #root .sm\:h-10 {
    height: 2.5rem;
  }

  #root .sm\:h-8 {
    height: 2rem;
  }

  #root .sm\:h-9 {
    height: 2.25rem;
  }

  #root .sm\:w-9 {
    width: 2.25rem;
  }

  #root .sm\:pl-6 {
    padding-left: 1.5rem;
  }
}@media (prefers-color-scheme: dark) {

  #root .dark\:bg-destructive\/60 {
    background-color: rgb(var(--ds-primary) / 0.6);
  }

  #root .dark\:hover\:bg-accent\/50:hover {
    background-color: rgb(var(--ds-muted) / 0.5);
  }

  #root .dark\:active\:bg-accent\/50:active {
    background-color: rgb(var(--ds-muted) / 0.5);
  }
}#root :is(.\[\&\>svg\]\:pointer-events-none>svg) {
  pointer-events: none;
}#root :is(.\[\&\>svg\]\:size-3>svg) {
  width: 0.75rem;
  height: 0.75rem;
}#root :is(.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*='size-'])) {
  width: 1rem;
  height: 1rem;
}#root :is(.\[\&_svg\]\:pointer-events-none svg) {
  pointer-events: none;
}#root :is(.\[\&_svg\]\:shrink-0 svg) {
  flex-shrink: 0;
}#root a.\[a\&\]\:hover\:bg-accent:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--ds-muted) / var(--tw-bg-opacity, 1));
}#root a.\[a\&\]\:hover\:bg-destructive\/90:hover {
  background-color: rgb(var(--ds-primary) / 0.9);
}#root a.\[a\&\]\:hover\:bg-primary\/90:hover {
  background-color: rgb(var(--ds-primary) / 0.9);
}#root a.\[a\&\]\:hover\:bg-secondary\/90:hover {
  background-color: rgb(var(--ds-muted) / 0.9);
}#root a.\[a\&\]\:hover\:text-accent-foreground:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--ds-foreground) / var(--tw-text-opacity, 1));
}
