:root{--color-bg: #f1f5f9;--color-text: #1e293b;--color-text-muted: #64748b;--color-text-heading: #334155;--color-border: #cbd5e1;--color-border-light: #e2e8f0;--color-surface: #ffffff;--color-link-bg: #dbeafe;--color-link-bg-hover: #bfdbfe;--color-link-border: #93c5fd;--color-link-text: #1e40af;--color-external-bg: #f8fafc;--color-external-bg-hover: #e2e8f0;--color-external-border: #94a3b8;--color-external-text: #334155;--color-viewer-bg: #334155}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:Georgia,Times New Roman,serif;line-height:1.5;color:var(--color-text);background:var(--color-bg)}.app{min-height:100vh}.page-shell{display:grid;grid-template-columns:1fr min(52rem,100%) 1fr}.page{grid-column:2;padding:2rem 1.25rem 3rem}.toc{display:none}@media(min-width:72rem){.toc{display:block;grid-column:1;justify-self:end;align-self:start;position:sticky;top:2rem;width:14rem;max-height:calc(100vh - 4rem);overflow-y:auto;padding:2rem 1.5rem 3rem 1.25rem;font-family:system-ui,sans-serif;font-size:.8rem;line-height:1.4}.toc-list,.toc-pieces{list-style:none;margin:0;padding:0}.toc-section+.toc-section{margin-top:1rem}.toc-section-title{display:block;margin-bottom:.35rem;font-size:.7rem;letter-spacing:.04em;color:var(--color-text-muted)}.toc-pieces{display:flex;flex-direction:column;gap:.65rem;padding-left:.65rem}.toc-pieces li a{display:block;line-height:1.3}.toc a{color:var(--color-text-muted);text-decoration:none}.toc a:hover{color:var(--color-link-text);text-decoration:underline}}.page-header{margin-bottom:2rem;border-bottom:1px solid var(--color-border);padding-bottom:1rem}.page-back{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;line-height:1;text-decoration:none;color:var(--color-link-text);background:var(--color-link-bg);border:1px solid var(--color-link-border);border-radius:.25rem}.page-back:hover{background:var(--color-link-bg-hover)}.page-header-top{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:.35rem}.page-header-title{display:flex;align-items:baseline;gap:.5rem;min-width:0}.repo-source{display:flex;flex-shrink:0;align-items:baseline;gap:.35rem;font-family:system-ui,sans-serif;font-size:.85rem}.repo-label{color:var(--color-text-muted)}.repo-link{color:var(--color-text-muted);text-decoration:none}.repo-link:hover{color:var(--color-link-text);text-decoration:underline}@media(max-width:640px){.repo-source,.viewer-toolbar-start .pdf-links{display:none}}.page-header-top h1{margin:0;font-size:1.75rem;font-weight:400;letter-spacing:.02em;color:var(--color-text-heading)}.page-header p{margin:0;color:var(--color-text-muted);font-size:.95rem}.catalog-section{margin-bottom:2.5rem}.catalog-section h2{margin:0 0 1rem;font-size:1.15rem;font-weight:400;letter-spacing:.04em;color:var(--color-text-heading)}.composition-card{scroll-margin-top:1.5rem;background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:4px;padding:1rem 1.15rem;margin-bottom:.75rem}.composition-card h3{margin:0 0 .65rem;font-size:1.05rem;font-weight:400;color:var(--color-text-heading)}.composition-description{margin-bottom:.85rem}.composition-description p{margin:0 0 .65rem;font-size:.95rem;color:var(--color-text-muted)}.composition-description p:last-child{margin-bottom:0}.pdf-links{display:flex;flex-wrap:wrap;gap:.5rem}.external-links{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.pdf-link{display:inline-block;padding:.35rem .75rem;font-size:.875rem;font-family:system-ui,sans-serif;text-decoration:none;color:var(--color-link-text);background:var(--color-link-bg);border:1px solid var(--color-link-border);border-radius:3px}.pdf-link:hover{background:var(--color-link-bg-hover)}.pdf-link-active,.pdf-link-active:hover,.viewer-toolbar .pdf-link-active,.viewer-toolbar .pdf-link-active:hover{color:#fff;background:var(--color-link-text);border-color:var(--color-link-text)}.external-link{display:inline-flex;align-items:center;gap:.3rem;padding:.35rem .75rem;font-size:.875rem;font-family:system-ui,sans-serif;text-decoration:none;color:var(--color-external-text);background:var(--color-external-bg);border:1px solid var(--color-external-border);border-radius:3px}.external-link:hover{background:var(--color-external-bg-hover)}.external-link-icon{flex-shrink:0;opacity:.7}.viewer-page{display:flex;flex-direction:column;height:100vh;height:100dvh;position:relative;overflow:hidden}.viewer-chrome{position:relative;flex-shrink:0;z-index:2}.viewer-chrome.is-collapsed{height:0;overflow:visible;pointer-events:none}.viewer-header{overflow:hidden;background:var(--color-surface);border-bottom:1px solid var(--color-border-light);max-height:6rem;opacity:1;transition:max-height .2s ease,opacity .2s ease,border-color .2s ease}.viewer-chrome.is-collapsed .viewer-header{max-height:0;opacity:0;border-bottom-color:transparent;pointer-events:none}.viewer-header-tab{position:absolute;left:1rem;bottom:0;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:4rem;height:2.3rem;padding:0;color:var(--color-text-muted);background:var(--color-surface);border:1px solid var(--color-border-light);border-top:none;border-radius:0 0 6px 6px;cursor:pointer;transform:translateY(100%);transition:color .15s ease,background .15s ease}.viewer-chrome.is-collapsed .viewer-header-tab{position:fixed;top:0;left:1rem;bottom:auto;border-top:1px solid var(--color-border-light);transform:none;pointer-events:auto}.viewer-page-nav.is-floating{position:fixed;top:0;right:1rem;left:auto;transform:none;pointer-events:auto;z-index:4;display:flex;align-items:center;gap:.2em;padding:.15rem .5rem .25rem;background:var(--color-surface);border:1px solid var(--color-border-light);border-top:none;border-radius:0 0 6px 6px;font-family:system-ui,sans-serif;font-size:.9rem;color:var(--color-text-muted);font-variant-numeric:tabular-nums}.viewer-page-nav.is-floating .viewer-page-indicator{display:contents}.viewer-page-nav.is-floating .viewer-page-current,.viewer-page-nav.is-floating .viewer-page-total{padding:0;text-align:left}.viewer-page-nav.is-floating .viewer-page-separator{position:static;transform:none}.viewer-header-tab:hover{color:var(--color-link-text);background:var(--color-link-bg)}.viewer-footer-chrome{position:relative;flex-shrink:0;z-index:3}.viewer-footer-chrome:not(.is-collapsed){position:fixed;right:0;bottom:0;left:0;pointer-events:auto}.viewer-footer-chrome.is-collapsed{height:0;overflow:visible;pointer-events:none}.viewer-footer{overflow:hidden;background:var(--color-surface);border-top:1px solid var(--color-border-light);max-height:6rem;opacity:1;transition:max-height .2s ease,opacity .2s ease,border-color .2s ease}.viewer-footer-chrome.is-collapsed .viewer-footer{max-height:0;opacity:0;border-top-color:transparent;pointer-events:none}.viewer-footer-tab{position:absolute;left:1rem;top:0;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:4rem;height:2.3rem;padding:0;color:var(--color-text-muted);background:var(--color-surface);border:1px solid var(--color-border-light);border-bottom:none;border-radius:6px 6px 0 0;cursor:pointer;transform:translateY(-100%);transition:color .15s ease,background .15s ease}.viewer-footer-chrome.is-collapsed .viewer-footer-tab{position:fixed;bottom:0;left:1rem;top:auto;border-bottom:1px solid var(--color-border-light);border-top:none;transform:none;pointer-events:auto}.viewer-footer-tab:hover{color:var(--color-link-text);background:var(--color-link-bg)}.viewer-header-tab .chevron-icon,.viewer-footer-tab .chevron-icon{width:1.75rem;height:1.75rem}.viewer-footer-toolbar{justify-content:space-between}.viewer-section-label{font-family:system-ui,sans-serif;font-size:.85rem;color:var(--color-text-muted);letter-spacing:.04em;white-space:nowrap}.viewer-section-nav{display:flex;flex-wrap:wrap;gap:.5rem}.viewer-toolbar{position:relative;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem 1rem}.viewer-toolbar-start{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;flex-shrink:0;width:max-content;position:relative;z-index:1}.viewer-toolbar-end{display:flex;align-items:center;gap:1rem;flex-shrink:0;min-width:0;position:relative;z-index:1;flex-wrap:wrap;justify-content:flex-end}.viewer-page-nav{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;align-items:center;gap:.1rem;flex-shrink:0;z-index:3}.viewer-page-indicator{display:grid;grid-template-columns:1fr 1fr;align-items:center;min-width:0;font-family:system-ui,sans-serif;font-size:.9rem;color:var(--color-text-muted);font-variant-numeric:tabular-nums}.viewer-page-current{grid-column:1;text-align:right;padding-right:.3em;white-space:nowrap}.viewer-page-total{grid-column:2;text-align:left;padding-left:.3em;white-space:nowrap}.viewer-page-separator{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-family:system-ui,sans-serif;font-size:.9rem;color:var(--color-text-muted);pointer-events:none}.viewer-page-arrow{display:inline-flex;align-items:center;justify-content:center;width:1.85rem;height:1.85rem;padding:0;color:var(--color-link-text);background:var(--color-link-bg);border:1px solid var(--color-link-border);border-radius:4px;cursor:pointer}.chevron-icon{display:block}.viewer-page-arrow:hover:not(:disabled){background:var(--color-link-bg-hover)}.viewer-page-arrow:disabled{opacity:.35;cursor:default}.viewer-toolbar a{color:var(--color-link-text);text-decoration:none;font-family:system-ui,sans-serif;font-size:.9rem}.viewer-toolbar a:hover{text-decoration:underline}.viewer-annotation-help{display:inline-flex;align-items:center;justify-content:center;width:1.65rem;height:1.65rem;padding:0;font-family:system-ui,sans-serif;font-size:.85rem;font-weight:600;line-height:1;color:var(--color-link-text);background:var(--color-link-bg);border:1px solid var(--color-link-border);border-radius:50%;cursor:pointer}.viewer-annotation-help:hover{background:var(--color-link-bg-hover)}.annotation-help-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:1rem;background:#0f172a73}.annotation-help-modal{width:min(100%,28rem);max-height:min(85vh,32rem);overflow:auto;border:1px solid var(--color-border);border-radius:.5rem;background:var(--color-surface);box-shadow:0 8px 24px #0f172a33;color:var(--color-text);font-family:system-ui,sans-serif}.annotation-help-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.875rem 1rem;border-bottom:1px solid var(--color-border-light)}.annotation-help-header h2{margin:0;font-size:1rem;font-weight:600;color:var(--color-text-heading)}.annotation-help-close{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;font-size:1.25rem;line-height:1;color:var(--color-text-muted);background:transparent;border:none;border-radius:.25rem;cursor:pointer}.annotation-help-close:hover{color:var(--color-text);background:var(--color-bg)}.annotation-help-body{padding:.75rem 1rem 1rem}.annotation-help-body section+section{margin-top:.875rem}.annotation-help-body h3{margin:0 0 .35rem;font-size:.85rem;font-weight:600;color:var(--color-text-heading)}.annotation-help-body ul{margin:0;padding-left:1.15rem}.annotation-help-body li{font-size:.875rem;line-height:1.45;color:var(--color-text)}.annotation-help-body li+li{margin-top:.35rem}.viewer-content{flex:1;min-height:0;overflow-y:auto;background:var(--color-viewer-bg);touch-action:pan-x pan-y;overscroll-behavior:contain}.viewer-content.is-footer-visible{padding-bottom:4rem}.viewer-zoom-surface{width:100%}.viewer-content.is-header-hidden .viewer-page-slot{align-items:flex-start}.viewer-page-slot{display:flex;align-items:center;justify-content:center;min-height:100%;width:100%;flex-shrink:0;position:relative}.viewer-page-frame{position:relative;display:inline-block;max-width:100%;touch-action:pan-x pan-y}.viewer-page-slot canvas{display:block;box-shadow:0 2px 12px #0f172a59;touch-action:pan-x pan-y}.annotation-overlay{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.annotation-overlay.is-menu-active,.annotation-overlay.is-touch-active{pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none}.annotation-overlay-canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.viewer-page-frame.is-pen-active,.viewer-page-frame.is-pen-active canvas{touch-action:none}.viewer-content.is-pen-drawing{touch-action:none;overflow:hidden}.viewer-content.is-touch-annotating{touch-action:none}.viewer-content.is-touch-annotating .viewer-page-frame,.viewer-content.is-touch-annotating .viewer-page-slot canvas{touch-action:none}.annotation-eraser-cursor{stroke:#ec4899b3;stroke-width:1}.annotation-glyph{-webkit-user-select:none;user-select:none}.annotation-glyph:not(.annotation-glyph--text){font-family:Segoe UI Symbol,Noto Music,Bravura Text,serif}.annotation-glyph-group{pointer-events:none}.annotation-menu{position:fixed;z-index:41;padding:.375rem .5rem .5rem;border:1px solid rgb(148 163 184 / 35%);border-radius:.5rem;background:#1e293bf5;box-shadow:0 4px 16px #0f172a73;color:#e2e8f0;font-family:system-ui,sans-serif;touch-action:none}.annotation-menu-title{margin:0;font-size:.625rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#cbd5e1}.annotation-menu-header{display:flex;align-items:center;justify-content:space-between;gap:.375rem;margin:-.375rem -.5rem .375rem;padding:.375rem .5rem;border-bottom:1px solid rgb(148 163 184 / 22%);border-radius:.5rem .5rem 0 0;background:#64748b73;touch-action:none;-webkit-user-select:none;user-select:none}.annotation-menu-header-drag{flex:1;min-width:0;cursor:grab}.annotation-menu-clear{flex-shrink:0;padding:.125rem .375rem;border:1px solid rgb(148 163 184 / 45%);border-radius:.25rem;background:#64748b8c;color:#e2e8f0;font-family:inherit;font-size:.625rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;touch-action:manipulation}.annotation-menu-header-drag:active{cursor:grabbing}.annotation-menu-header:active{background:#64748b8c}.annotation-menu-colors{display:flex;flex-shrink:0;align-items:center;gap:.25rem}.annotation-menu-color-swatch{width:1.125rem;height:1.125rem;padding:0;border:1px solid rgb(148 163 184 / 45%);border-radius:.125rem;cursor:default;touch-action:manipulation}.annotation-menu-color-swatch--selected{box-shadow:0 0 0 1px #0f172ad9,0 0 0 2px #fff}.annotation-menu-footer{display:flex;align-items:center;justify-content:space-between;gap:.375rem;margin:.375rem -.5rem -.375rem;padding:.375rem .5rem;border-top:1px solid rgb(148 163 184 / 22%);border-radius:0 0 .5rem .5rem;background:#64748b73;touch-action:none;-webkit-user-select:none;user-select:none}.annotation-menu-footer-drag{flex:1;align-self:stretch;min-width:.75rem;cursor:grab}.annotation-menu-footer-drag:active{cursor:grabbing}.annotation-menu-footer:active{background:#64748b8c}.annotation-menu-tool-toggle{display:flex;flex-shrink:0;gap:.25rem}.annotation-menu-tool-btn{display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;border:1px solid rgb(148 163 184 / 45%);border-radius:.375rem;background:#64748b8c;color:#e2e8f0;cursor:default;touch-action:manipulation}.annotation-menu-tool-btn svg{width:1rem;height:1rem}.annotation-menu-tool-symbol{font-size:1rem;line-height:1}.annotation-menu-tool-btn--selected{box-shadow:0 0 0 1px #0f172ad9,0 0 0 2px #fff}.annotation-menu-glyph-rows{display:flex;flex-direction:column;gap:.25rem}.annotation-menu-body{position:relative}.annotation-menu-chord-body{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-start;justify-content:flex-start;min-width:0;min-height:0;overflow:hidden}.annotation-menu-body-panel--hidden{visibility:hidden;pointer-events:none}.annotation-menu-chord-editor{position:relative;display:flex;flex-direction:column;align-items:flex-start;width:100%;height:100%;min-height:0;min-width:0}.annotation-menu-chord-rotate-btn{position:absolute;top:.25rem;right:.25rem;z-index:1}.annotation-menu-chord-editor-column{display:flex;flex:1 1 auto;flex-direction:column;align-items:flex-start;gap:.125rem;width:100%;height:100%;min-height:0;min-width:0;container-type:size}.annotation-menu-chord-numeral-wheel-wrap{flex:0 0 auto}.annotation-menu-chord-numeral-wheel{box-sizing:border-box;display:inline-block;width:4ch;padding:.2em 0;border:1px solid rgb(148 163 184 / 45%);border-radius:.25rem;background:#64748b8c;color:#f8fafc;font-size:clamp(.625rem,11cqmin,1rem);line-height:1.2;text-align:center;touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none}.annotation-menu-chord-numeral-wheel:active{cursor:grabbing}.annotation-menu-chord-glyph-drag{position:absolute;right:0;bottom:0;z-index:1}.annotation-chord-diagram{display:block;pointer-events:none}.annotation-chord-diagram-lines line{stroke-width:1px;vector-effect:non-scaling-stroke}.annotation-chord-diagram-dot,.annotation-menu-chord-grid-dot{pointer-events:none}.annotation-chord-diagram-dot--outline,.annotation-menu-chord-grid-dot--outline{fill:none;stroke-width:1px;vector-effect:non-scaling-stroke}.annotation-glyph-drag-preview--chord{line-height:0}.annotation-menu-chord-grid{display:block;flex:1 1 auto;width:100%;height:100%;min-height:0;min-width:0;color:#f8fafc;touch-action:manipulation}.annotation-menu-chord-grid-lines line{stroke-width:1px;vector-effect:non-scaling-stroke}.annotation-menu-chord-grid-icon-lines line{stroke-width:1}.annotation-menu-chord-grid-intersection{fill:transparent;cursor:pointer}.annotation-menu-glyphs{display:flex;gap:.25rem}.annotation-menu-text-row{width:100%;touch-action:none;cursor:default}.annotation-menu-text-input{box-sizing:border-box;width:100%;padding:.25rem .375rem;border:1px solid rgb(148 163 184 / 35%);border-radius:.375rem;background:#0f172a7f;color:#f8fafc;font-size:.75rem;font-weight:600;line-height:1.2;touch-action:manipulation;cursor:text}.annotation-menu-text-input:focus{outline:none;border-color:#94a3b8a6;box-shadow:0 0 0 1px #ffffff59}.annotation-menu-glyph{display:flex;align-items:center;justify-content:center;width:auto;height:auto;padding:0;border:1px solid rgb(148 163 184 / 25%);border-radius:.375rem;background:#0f172a7f;color:#f8fafc;cursor:default;touch-action:none}.annotation-menu-glyph--button{cursor:pointer;touch-action:manipulation;border-color:#94a3b873;background:#64748b8c}.annotation-menu-chord-grid-icon{display:block;pointer-events:none}.annotation-menu-glyph-symbol{font-family:Segoe UI Symbol,Noto Music,Bravura Text,serif;line-height:1;pointer-events:none}.annotation-menu-glyph-symbol--number,.annotation-glyph--number{font-family:system-ui,sans-serif;font-weight:600}.annotation-menu-glyph-symbol--dynamic,.annotation-glyph--dynamic{font-family:Georgia,Times New Roman,Palatino Linotype,serif;font-style:italic;font-weight:600}.annotation-glyph-drag-preview{position:fixed;z-index:42;transform:translate(-50%,-50%);font-family:Segoe UI Symbol,Noto Music,Bravura Text,serif;line-height:1;pointer-events:none;opacity:.85}.annotation-glyph-drag-preview--text{font-weight:600}.viewer-storage-warning{margin:0;padding:.5rem 1rem;background:#7f1d1d59;color:#fecaca;font-family:system-ui,sans-serif;font-size:.875rem;text-align:center}.stylus-diagnostics{max-width:48rem;margin:0 auto;padding:2rem 1rem 3rem;font-family:system-ui,sans-serif}.stylus-diagnostics h1{margin:0 0 .75rem}.stylus-diagnostics-pad{height:16rem;margin:1.5rem 0;border:2px dashed rgb(148 163 184 / 60%);border-radius:.75rem;background:#0f172a59;touch-action:none}.stylus-diagnostics-log{max-height:20rem;overflow:auto;border:1px solid rgb(148 163 184 / 25%);border-radius:.5rem;padding:.75rem 1rem;background:#0f172a33}.stylus-diagnostics-log ul{margin:0;padding-left:1.25rem}.stylus-diagnostics-log li{margin-bottom:.35rem;font-size:.85rem}.stylus-diagnostics-empty{margin:0;color:var(--color-text-muted)}.viewer-status{margin:2rem auto;padding:0 1rem;font-family:system-ui,sans-serif;font-size:.95rem;color:#cbd5e1;text-align:center}.viewer-status-error{color:#fca5a5}.landing-page{max-width:36rem;margin:0 auto;padding-top:3rem}.landing-header{text-align:left;margin-bottom:2.5rem}.landing-header h1{margin:0 0 .5rem}.landing-header p{margin:0;color:var(--color-text-muted)}.landing-nav{display:flex;flex-direction:column;gap:1rem}.landing-link{display:block;padding:1.25rem 1.5rem;border:1px solid var(--color-border);border-radius:.5rem;background:var(--color-surface);color:inherit;text-decoration:none;transition:border-color .15s,box-shadow .15s}.landing-link:hover{border-color:var(--color-link-border);box-shadow:0 2px 8px #0f172a14}.landing-link-title{display:block;font-family:system-ui,sans-serif;font-size:1.1rem;font-weight:600;color:var(--color-link-text);margin-bottom:.35rem}.landing-link-desc{display:block;font-size:.95rem;color:var(--color-text-muted)}
