diff --git a/Free Lead Sheets for All Instruments and Voices!_files/A.sd,,_support-files,,_style.css+fonts,,_raleway,,_400.css+fonts,,_work-sans,,_400.css+fonts,,_raleway,,_400-italic.css+fonts,,_raleway,,_700-italic.css+fonts,,_raleway,,_700.css+fonts,,_work-sans,,_700.css,Mcc.Rb11laac4n.css.pagespeed.cf.DcHihq0-Gj.css b/Free Lead Sheets for All Instruments and Voices!_files/A.sd,,_support-files,,_style.css+fonts,,_raleway,,_400.css+fonts,,_work-sans,,_400.css+fonts,,_raleway,,_400-italic.css+fonts,,_raleway,,_700-italic.css+fonts,,_raleway,,_700.css+fonts,,_work-sans,,_700.css,Mcc.Rb11laac4n.css.pagespeed.cf.DcHihq0-Gj.css deleted file mode 100644 index ffa6f33..0000000 --- a/Free Lead Sheets for All Instruments and Voices!_files/A.sd,,_support-files,,_style.css+fonts,,_raleway,,_400.css+fonts,,_work-sans,,_400.css+fonts,,_raleway,,_400-italic.css+fonts,,_raleway,,_700-italic.css+fonts,,_raleway,,_700.css+fonts,,_work-sans,,_700.css,Mcc.Rb11laac4n.css.pagespeed.cf.DcHihq0-Gj.css +++ /dev/null @@ -1 +0,0 @@ -@charset "utf-8";@font-face{font-family:TrajanRegular;font-display:fallback;src:url(css_webfonts/trajan-webfont.eot);src:url(css_webfonts/trajan-webfont.eot?iefix) format('eot') , url(css_webfonts/trajan-webfont.woff) format('woff') , url(css_webfonts/trajan-webfont.ttf) format('truetype') , url(css_webfonts/trajan-webfont.svg#webfontSKh5EtvY) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:OpenSans;font-display:fallback;src:url(css_webfonts/opensans-webfont.eot);src:url(css_webfonts/opensans-webfont.eot?iefix) format('eot') , url(css_webfonts/opensans-webfont.woff) format('woff') , url(css_webfonts/opensans-webfont.ttf) format('truetype') , url(css_webfonts/opensans-webfont.svg#OpenSansRegular) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:OpenSans;font-display:fallback;src:url(css_webfonts/opensans-webfont.eot);src:url(css_webfonts/opensans-webfont.eot?iefix) format('eot') , url(css_webfonts/opensans-webfont.woff) format('woff') , url(css_webfonts/opensans-webfont.ttf) format('truetype') , url(css_webfonts/opensans-webfont.svg#OpenSansRegular) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:NovareseRegular;font-display:fallback;src:url(css_webfonts/novarese-webfont.eot);src:url(css_webfonts/novarese-webfont.eot?iefix) format('eot') , url(css_webfonts/novarese-webfont.woff) format('woff') , url(css_webfonts/novarese-webfont.ttf) format('truetype') , url(css_webfonts/novarese-webfont.svg#webfontIopo13we) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-cyrillic-ext-400-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-normal.woff) format('woff');unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-cyrillic-400-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-normal.woff) format('woff');unicode-range:U +0301 , U +0400-045F , U +0490-0491 , U +04B0-04B1 , U +2116}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-vietnamese-400-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-normal.woff) format('woff');unicode-range:U +0102-0103 , U +0110-0111 , U +0128-0129 , U +0168-0169 , U +01A0-01A1 , U +01AF-01B0 , U +1EA0-1EF9 , U +20AB}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-latin-ext-400-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-normal.woff) format('woff');unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-latin-400-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-normal.woff) format('woff');unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Work Sans';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/work-sans/files/work-sans-vietnamese-400-normal.woff2) format('woff2') , url(fonts/work-sans/files/work-sans-all-400-normal.woff) format('woff');unicode-range:U +0102-0103 , U +0110-0111 , U +0128-0129 , U +0168-0169 , U +01A0-01A1 , U +01AF-01B0 , U +1EA0-1EF9 , U +20AB}@font-face{font-family:'Work Sans';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/work-sans/files/work-sans-latin-ext-400-normal.woff2) format('woff2') , url(fonts/work-sans/files/work-sans-all-400-normal.woff) format('woff');unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Work Sans';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/work-sans/files/work-sans-latin-400-normal.woff2) format('woff2') , url(fonts/work-sans/files/work-sans-all-400-normal.woff) format('woff');unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-cyrillic-ext-400-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-italic.woff) format('woff');unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-cyrillic-400-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-italic.woff) format('woff');unicode-range:U +0301 , U +0400-045F , U +0490-0491 , U +04B0-04B1 , U +2116}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-vietnamese-400-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-italic.woff) format('woff');unicode-range:U +0102-0103 , U +0110-0111 , U +0128-0129 , U +0168-0169 , U +01A0-01A1 , U +01AF-01B0 , U +1EA0-1EF9 , U +20AB}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-latin-ext-400-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-italic.woff) format('woff');unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:400;src:url(fonts/raleway/files/raleway-latin-400-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-400-italic.woff) format('woff');unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-cyrillic-ext-700-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-italic.woff) format('woff');unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-cyrillic-700-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-italic.woff) format('woff');unicode-range:U +0301 , U +0400-045F , U +0490-0491 , U +04B0-04B1 , U +2116}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-vietnamese-700-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-italic.woff) format('woff');unicode-range:U +0102-0103 , U +0110-0111 , U +0128-0129 , U +0168-0169 , U +01A0-01A1 , U +01AF-01B0 , U +1EA0-1EF9 , U +20AB}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-latin-ext-700-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-italic.woff) format('woff');unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Raleway';font-style:italic;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-latin-700-italic.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-italic.woff) format('woff');unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-cyrillic-ext-700-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-normal.woff) format('woff');unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-cyrillic-700-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-normal.woff) format('woff');unicode-range:U +0301 , U +0400-045F , U +0490-0491 , U +04B0-04B1 , U +2116}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-vietnamese-700-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-normal.woff) format('woff');unicode-range:U +0102-0103 , U +0110-0111 , U +0128-0129 , U +0168-0169 , U +01A0-01A1 , U +01AF-01B0 , U +1EA0-1EF9 , U +20AB}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-latin-ext-700-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-normal.woff) format('woff');unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Raleway';font-style:normal;font-display:swap;font-weight:700;src:url(fonts/raleway/files/raleway-latin-700-normal.woff2) format('woff2') , url(fonts/raleway/files/raleway-all-700-normal.woff) format('woff');unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Work Sans';font-style:normal;font-display:swap;font-weight:700;src:url(fonts/work-sans/files/work-sans-vietnamese-700-normal.woff2) format('woff2') , url(fonts/work-sans/files/work-sans-all-700-normal.woff) format('woff');unicode-range:U +0102-0103 , U +0110-0111 , U +0128-0129 , U +0168-0169 , U +01A0-01A1 , U +01AF-01B0 , U +1EA0-1EF9 , U +20AB}@font-face{font-family:'Work Sans';font-style:normal;font-display:swap;font-weight:700;src:url(fonts/work-sans/files/work-sans-latin-ext-700-normal.woff2) format('woff2') , url(fonts/work-sans/files/work-sans-all-700-normal.woff) format('woff');unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Work Sans';font-style:normal;font-display:swap;font-weight:700;src:url(fonts/work-sans/files/work-sans-latin-700-normal.woff2) format('woff2') , url(fonts/work-sans/files/work-sans-all-700-normal.woff) format('woff');unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.CalloutBox{color:#fff;background-color:#888;margin:2em auto;padding:1px 4%}.CalloutBox p{margin:1em 0}.ReminderBox{color:#fff;background-color:#888;width:50%;float:right;padding:1px 4%;margin:1em 0 1em 2em}.ReminderBox h4{margin-top:.5em}.ReminderBox p{margin:1em 0}.AdSenseBoxLeft,.AdSenseBoxRight,.AdSenseBoxCenter468,.AdSenseBoxExtraColumn{padding:1%}.AdSenseBoxLeft{float:left;margin-right:2%;margin-bottom:2%}.AdSenseBoxRight{float:right;margin-left:2%;margin-bottom:2%}.AdSenseResponsiveBox{width:50%}@media only screen and (max-width:447px){.AdSenseResponsiveBox{margin:0;float:none;width:100%}}.AdSenseBoxCenter{text-align:center;clear:both}.AdSenseBoxCenter468{width:468px;margin:2% auto;clear:both}.AdSenseBoxExtraColumn{padding:0;margin:2% auto;clear:both}.formBarGraphBar{border:0;background-color:#eee}#PageWrapper .formwrapper .formBuilderForm-Throbber{border:0}#PageWrapper .FormBlockLeft .formwrapper{float:left;margin-right:5px}#PageWrapper .FormBlockRight .formwrapper{float:right;margin-left:5px}#PageWrapper .FormBlockCenter .formwrapper{margin-left:auto;margin-right:auto}.WhatsNew{border:1px solid #eee;margin:1em 0;position:relative;box-sizing:border-box}.WhatsNewLeft{float:left;margin-right:.5em}.WhatsNewRight{float:right;margin-left:.5em}.WhatsNewCenter{margin-left:auto;margin-right:auto}#PageWrapper .WhatsNew img{border:0}#PageWrapper .WhatsNew h2{margin:0;padding:.3em 24px .3em 4px;background:#eee;line-height:1.2;font-size:125%;text-align:center;color:#888}#PageWrapper .WhatsNew ol,#PageWrapper .WhatsNew ul,#PageWrapper .WhatsNew li{margin:0;padding:0;list-style:none;background:transparent}#PageWrapper .WhatsNew ol{margin:0 4%;overflow:hidden}#PageWrapper .WhatsNew ol li{display:block;padding-bottom:1px;border-top:1px solid #ecf0f1;margin-top:-1px}#PageWrapper .WhatsNew h3{font-size:125%;line-height:1.2;margin-top:1em;margin-bottom:0}.WhatsNew-time{font-size:75%;color:#888;margin-top:.5em}.WhatsNew-more{text-align:right;margin:1em 0}.WhatsNew-subscribe{position:absolute;z-index:2;top:0;right:0;text-align:right}.WhatsNew-icon{padding:4px 4px 2px;width:24px;height:22px}#PageWrapper .WhatsNew-subscribe ul{display:none;padding:2px 4px;background:#eee}#PageWrapper .WhatsNew-subscribe ul li{display:block;background-image:none}#PageWrapper .WhatsNew-subscribe:hover ul{display:block}#PageWrapper .WhatsNew-subscribe ul img{display:block;padding:2px 0;width:91px;height:21px}@media only screen and (max-width:768px){#PageWrapper .WhatsNew h2{padding-right:4px}.WhatsNew-subscribe{position:static}.WhatsNew-icon{display:none}#PageWrapper .WhatsNew-subscribe ul{display:block;text-align:center}#PageWrapper .WhatsNew-subscribe ul img{display:inline-block}}.RSSbox{margin:1em 0 2em;text-align:center}.RSSbox ul{margin:0;padding:0;list-style:none}.RSSbox li{background-image:none;padding:0;margin:0 0 5px 0}.text_image_block{margin:.5em 0 0 0}.text_image_not_floated.text_image_left .ImageBlock img{float:left}.text_image_not_floated.text_image_right .ImageBlock img{float:right}.text_image_not_floated.text_image_center .ImageBlock{text-align:center}#PageWrapper .text_image_floated .ImageBlock{margin:.3em 0 0 0}#PageWrapper .text_image_floated.text_image_left .ImageBlock{float:left;margin-right:10px}#PageWrapper .text_image_floated.text_image_right .ImageBlock{float:right;margin-left:10px}.text_image_top_cleared,.text_image_both_cleared{clear:both}.text_image_bottom_cleared p:last-of-type:after,.text_image_both_cleared p:last-of-type:after{content:"";clear:both;display:block;width:100%}@media (max-width:768px){#PageWrapper .text_image_floated.text_image_left .ImageBlock,#PageWrapper .text_image_floated.text_image_right .ImageBlock{float:none;margin:0 0 15px 0}div#PageWrapper .text_image_floated .ImageBlock{max-width:100%}}.Ezine{padding:4%;margin-bottom:2em;background:#eee}.Ezine table{width:100%}.Ezine td{width:50%;text-align:center;vertical-align:top}.Ezine .EzineInputAbove{width:100%}.EzineInput input{width:85%;max-width:350px;padding:5px}.Ezine input:focus[type="text"]{background-color:#ffc}td.EzineLabel{text-align:right;vertical-align:middle}td.EzineLabelAbove{text-align:center}.EzineDescription{text-align:center}.Ezine2{margin:1em 0;padding:.5em;border:1px solid #eee}.EzineRow{padding:.5em 0;max-width:100%;box-sizing:border-box}.EzineVertical label{display:block}.EzineHorizontal .EzineRow,.EzineHorizontal label{display:inline-block}.Ezine2 label,.Ezine2 input[type="text"],.Ezine2 input[type="email"],.EzineButton{vertical-align:middle;max-width:100%;box-sizing:border-box}.Ezine2 input:focus[type="text"],.Ezine2 input:focus[type="email"]{background-color:#ffc}.EzineLeft,body #PageWrapper .Ezine2.EzineLeft,html.mobile body #PageWrapper .Ezine2.EzineLeft{text-align:left}.EzineCenter,body #PageWrapper .Ezine2.EzineCenter,html.mobile body #PageWrapper .Ezine2.EzineCenter{text-align:center}.EzineRight,body #PageWrapper .Ezine2.EzineRight,html.mobile body #PageWrapper .Ezine2.EzineRight{text-align:right}a .Caption{color:inherit}.CaptionLeft{text-align:left!important}.CaptionCenter{margin-left:auto;margin-right:auto;text-align:center!important}.CaptionRight{text-align:right!important}.Caption{font-size:85%;display:block}img{max-width:100%;box-sizing:border-box}#PageWrapper .ImageBlock img{max-width:100%}.ImageBlock img{margin:0}#PageWrapper .ImageBlock{overflow:hidden;max-width:100%}#PageWrapper .ImageBlockLeft{float:left;text-align:center;margin-bottom:10px}#PageWrapper .ImageBlockLeft img{margin-right:15px}#PageWrapper .ImageBlockRight{float:right;text-align:center;margin-bottom:10px}#PageWrapper .ImageBlockRight img{margin-left:15px}#PageWrapper .ImageBlockRight .Caption{margin-left:15px}#PageWrapper .ImageBlockCenter{margin:15px 0;text-align:center}#PageWrapper .MediaBlock{margin-top:15px;margin-bottom:15px}#PageWrapper .MediaBlockLeft{float:left;margin-right:15px}#PageWrapper .MediaBlockRight{float:right;margin-left:15px}#PageWrapper .MediaBlockCenter{display:block;margin-left:auto;margin-right:auto;margin-top:15px;margin-bottom:15px}.eucookiebar button,.eucookiebar p{display:inline-block;margin:.25em .5em;font-family:"Lucida Grande",Geneva,Arial,Verdana,sans-serif}.eucookiebar{text-align:center;position:absolute;top:-250px;left:0;right:0;background:#fff;padding:.5% 2%;box-shadow:0 4px 10px 1px rgba(0,0,0,.2);z-index:9999;font-size:12px;font-family:"Lucida Grande",Geneva,Arial,Verdana,sans-serif;color:#666;transition:top .5s ease , bottom .5s ease , opacity .5s ease}.eucookiebar a{color:#00f;font-weight:400;text-decoration:underline}.eucookiebar a:visited{color:#551a8b}.eucookiebar a:active{color:red}.eucookiebar button{background:#eee;border:1px solid #888;border-radius:4px;font-size:100%;font-weight:700;color:#666}.eucookiebar button:hover{background:#666;color:#fff}.eucookiebar.show{top:0;opacity:1}.eucookiebar.hide{top:-250px;opacity:0;pointer-events:none}.eucookiebar.bottom{top:auto;bottom:-250px;position:fixed}.eucookiebar.bottom.show{bottom:0}.eucookiebar.bottom.hide{bottom:-250px}#PageWrapper .noalignment{float:left}#PageWrapper .pinit{text-align:center}#PageWrapper .RelatedPagesBlock ul{padding:0;margin:0;list-style:none}#PageWrapper .RelatedPagesBlock ul.down .relatedPagesThumbnail{float:left;margin-right:10px}#PageWrapper .RelatedPagesBlock ul.down .relatedPagesThumbnail a{display:block;width:50px;height:50px;background-size:cover;background-repeat:no-repeat;background-position:center}#PageWrapper .RelatedPagesBlock ul.down h3{margin-top:0;margin-bottom:0}#PageWrapper .RelatedPagesBlock ul.down p{margin:0}#PageWrapper .RelatedPagesBlock ul li{border:none!important}#PageWrapper .RelatedPagesBlock ul.down li{clear:both;overflow:hidden;padding-top:10px;padding-bottom:10px}#PageWrapper .RelatedPagesBlock ul.across{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;justify-content:space-between}#PageWrapper .RelatedPagesBlock ul.across .relatedPagesThumbnail a{display:block;width:100%;height:200px;background-size:cover;background-repeat:no-repeat;background-position:center}#PageWrapper .RelatedPagesBlock ul.across li{box-sizing:border-box;padding:10px 0;width:200px}#PageWrapper .RelatedPagesBlock ul.text li{padding-top:10px;padding-bottom:10px}#PageWrapper .RelatedPagesBlock ul.text li .relatedPagesThumbnail{display:none}#PageWrapper .RelatedPagesBlock ul.text li p{margin:0}#PageWrapper .RelatedPagesBlock .text h3{margin-top:0}.TOC dt{font-weight:bold}.TOC dd{margin-bottom:20px}table#comments{table-layout:fixed;max-width:100%}#PageWrapper .formbody td{padding:2px}#NavColumn .formbody input[type="text"],#NavColumn .formbody textarea,#NavColumn .formbody img{box-sizing:border-box}#NavColumn .formbody img.captcha_img{margin-bottom:10px}#notificationOptions,#notificationOptions li{list-style-type:none}.socializeIt,.formbody,.c2_invitation{margin-top:12px;margin-bottom:12px}.googlePlusOne{margin-top:8px;margin-bottom:8px}.with_images .othervisitors p{margin-left:56px}.thumb_container{float:left;width:50px;height:50px;overflow:hidden;margin-top:3px}.with_images .othervisitors .submission_thumbnail{width:100%}.othervisitors{clear:both}.othervisitors img{border:0}.grid_block{table-layout:fixed;border-collapse:collapse}.grid_block td{padding:0}.mobile .responsive-row img,.bb1mobile .responsive-row img{max-width:100%!important;box-sizing:border-box}@media only screen and (max-width:768px){.responsive-row img{max-width:100%!important;box-sizing:border-box}}.responsive-row,div[class*="responsive_grid_block-"]{overflow:hidden}div[class*="responsive_col-"]{float:left;min-height:1px;box-sizing:border-box}.responsive_grid_block-12 div[class*="responsive_col-"]{width:8.333%}.responsive_grid_block-11 div[class*="responsive_col-"]{width:9.0909%}.responsive_grid_block-10 div[class*="responsive_col-"]{width:10%}.responsive_grid_block-9 div[class*="responsive_col-"]{width:11.111%}.responsive_grid_block-8 div[class*="responsive_col-"]{width:12.5%}.responsive_grid_block-7 div[class*="responsive_col-"]{width:14.285%}.responsive_grid_block-6 div[class*="responsive_col-"]{width:16.666%}.responsive_grid_block-5 div[class*="responsive_col-"]{width:20%}.responsive_grid_block-4 div[class*="responsive_col-"]{width:25%}.responsive_grid_block-3 div[class*="responsive_col-"]{width:33.333%}.responsive_grid_block-2 div[class*="responsive_col-"]{width:50%}@media only screen and (max-width:768px){.responsive_grid_block-12 div[class*="responsive_col-"]{width:16.666%}.responsive_grid_block-12>.responsive-row>.responsive_col-7{clear:left}.responsive_grid_block-10 div[class*="responsive_col-"]{width:20%}.responsive_grid_block-10>.responsive-row>.responsive_col-6{clear:left}.responsive_grid_block-9 div[class*="responsive_col-"]{width:33.333%}.responsive_grid_block-9>.responsive-row>.responsive_col-4,.responsive_grid_block-9>.responsive-row>.responsive_col-7{clear:left}.responsive_grid_block-8 div[class*="responsive_col-"]{width:25%}.responsive_grid_block-8>.responsive-row>.responsive_col-5{clear:left}.responsive_grid_block-6 div[class*="responsive_col-"]{width:33.333%}.responsive_grid_block-6>.responsive-row>.responsive_col-4{clear:left}.responsive_grid_block-4 div[class*="responsive_col-"]{width:50%}.responsive_grid_block-4>.responsive-row>.responsive_col-3{clear:left}}@media only screen and (max-width:447px){.responsive_grid_block-12 div[class*="responsive_col-"]{width:25%}.responsive_grid_block-12>.responsive-row>.responsive_col-5,.responsive_grid_block-12>.responsive-row>.responsive_col-9{clear:left}.responsive_grid_block-12>.responsive-row>.responsive_col-7{clear:none}.responsive_grid_block-8 div[class*="responsive_col-"],.responsive_grid_block-6 div[class*="responsive_col-"]{width:50%}.responsive_grid_block-8>.responsive-row .responsive_col-3,.responsive_grid_block-8>.responsive-row .responsive_col-5,.responsive_grid_block-8>.responsive-row .responsive_col-7{clear:left}.responsive_grid_block-6>.responsive-row>.responsive_col-3,.responsive_grid_block-6>.responsive-row>.responsive_col-5{clear:left}.responsive_grid_block-6>.responsive-row>.responsive_col-4{clear:none}.responsive_grid_block-11 div[class*="responsive_col-"],.responsive_grid_block-10 div[class*="responsive_col-"],.responsive_grid_block-7 div[class*="responsive_col-"],.responsive_grid_block-5 div[class*="responsive_col-"],.responsive_grid_block-4 div[class*="responsive_col-"],.responsive_grid_block-3 div[class*="responsive_col-"],.responsive_grid_block-2 div[class*="responsive_col-"]{width:100%}}.video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.video-container iframe,.video-container object,.video-container embed,.video-container video{position:absolute;top:0;left:0;width:100%;height:100%}#PageWrapper .fb-like,#PageWrapper .fb-comments{display:block;text-align:center;margin-top:10px;margin-bottom:10px}.Navigation ul{margin:1em 0 2em;padding:0;list-style:none}.Navigation li{padding:0;margin:0}#PageWrapper div.Navigation a,.Navigation a,#PageWrapper div.Navigation a:visited,.Navigation a:visited{font-size:20px;background:#eee;color:#888;padding:5px 10px;text-decoration:none;display:block}#PageWrapper div.Navigation a:hover,.Navigation a:hover{background:#888;color:#fff}#PageWrapper div.HorizontalNavBar ul.root{display:inline-block;vertical-align:top;*display: inline;*zoom: 1;margin:0 auto;padding:0;line-height:18px;font-size:16px}#PageWrapper div.HorizontalNavBar ul ul{display:none;position:absolute;top:27px;left:1px;z-index:2;margin:0 0 0 -1px;padding:0;*zoom: 1;background:#fff;width:200px}#PageWrapper div.HorizontalNavBar ul ul ul{top:0;left:200px;margin:0 0 0 -2px;_top:1px}#PageWrapper div.HorizontalNavBar li{display:block;margin:0;padding:0;list-style:none;position:relative;float:left;white-space:nowrap;border:0}#PageWrapper div.HorizontalNavBar li.li1{z-index:1}#PageWrapper div.HorizontalNavBar li.hover{z-index:2}#PageWrapper div.HorizontalNavBar li li{float:none;white-space:normal;border:1px solid #fff;background:#fff;margin-top:-1px}#PageWrapper div.HorizontalNavBar span.navheader,#PageWrapper div.HorizontalNavBar a{display:block;padding:4px 8px;text-decoration:none;_float:left}#PageWrapper div.HorizontalNavBar ul ul span.navheader,#PageWrapper div.HorizontalNavBar ul ul a{_float:none}#PageWrapper div.HorizontalNavBar span.navheader{cursor:default;*zoom: 1;position:relative;padding-left:18px}#PageWrapper div.HorizontalNavBar ul ul span.navheader{padding-left:8px;padding-right:18px}#PageWrapper div.HorizontalNavBar span.navheader ins{display:block;width:0;height:0;line-height:0;position:absolute;top:50%;margin-top:-2px;left:2px;border:6px solid transparent;border-top-color:#000}#PageWrapper div.HorizontalNavBar ul ul span.navheader ins{left:auto;top:50%;right:2px;margin-top:-6px;border:6px solid transparent;border-left-color:#000}#PageWrapper div.HorizontalNavBar li.hover ul,#PageWrapper div.HorizontalNavBarCSS li:hover ul{display:block}#PageWrapper div.HorizontalNavBar li.hover li ul,#PageWrapper div.HorizontalNavBarCSS li:hover li ul{display:none}#PageWrapper div.HorizontalNavBar li li.hover ul,#PageWrapper div.HorizontalNavBarCSS li li:hover ul{display:block}#PageWrapper div.HorizontalNavBar li li.hover li ul,#PageWrapper div.HorizontalNavBarCSS li li:hover li ul{display:none}#PageWrapper div.HorizontalNavBar li li li.hover ul,#PageWrapper div.HorizontalNavBarCSS li li li:hover ul{display:block}#PageWrapper div.HorizontalNavBar li li li.hover li ul,#PageWrapper div.HorizontalNavBarCSS li li li:hover li ul{display:none}#PageWrapper div.HorizontalNavBar li li li li.hover ul,#PageWrapper div.HorizontalNavBarCSS li li li li:hover ul{display:block}#PageWrapper div.HorizontalNavBarWide ul.root{width:100%;display:table}#PageWrapper div.HorizontalNavBarWide li{display:table-cell;float:none;text-align:center}#PageWrapper div.HorizontalNavBarWide li li{text-align:left;display:block}#PageWrapper div.HorizontalNavBarLeft,#PageWrapper div.HorizontalNavBarLeft li{text-align:left}#PageWrapper div.HorizontalNavBarCenter,#PageWrapper div.HorizontalNavBarCenter li{text-align:center}#PageWrapper div.HorizontalNavBarRight,#PageWrapper div.HorizontalNavBarRight li{text-align:right}#PageWrapper div.HorizontalNavBarCenter li li,#PageWrapper div.HorizontalNavBarRight li li{text-align:left}html.touch #PageWrapper div.HorizontalNavBar ul.root>li{z-index:2}html.touch #PageWrapper div.HorizontalNavBar ul.root>li.hover{z-index:3}.ResponsiveNavButton{display:none}table#ColumnsWrapper,table#ContentWrapper{border-collapse:collapse;width:100%}@media only screen and (max-width:550px){.socializeIt,.socializeIt img,.socializeIt textarea{width:100%!important}.socializeIt td[rowspan="2"],.socializeIt td[rowspan="1"]{white-space:normal!important}}iframe{max-width:100%}.fb-like iframe{max-width:none!important}hr{clear:both}html{-webkit-text-size-adjust:100%}body{margin:0;color:#666;background:#fff;font-size:18px;line-height:1.5;font-family:OpenSans,Arial,Helvetica,sans-serif;text-rendering:optimizeLegibility}a{color:#e67e22;text-decoration:none}a:visited{color:#e67e22}a:focus{outline:1px dotted}a:active,a:hover{color:#d35400;outline:0}a:hover{text-decoration:underline}a img{border:0}hr{border-style:solid;width:75%}h1,h2,h3,h4,h5,h6{font-family:Raleway,Arial,Helvetica,sans-serif;line-height:1.3;margin:1em 0 .25em;padding-left:3px}h1{font-size:36px;margin-top:9px;color:#333}h2{font-size:166%;color:#888}h3{font-size:133%}h4{font-size:111%;color:#444}h5{font-size:100%}h6{font-size:100%}p{margin:.5em 0 1em}#PageWrapper{overflow:hidden}#PageWrapper{max-width:1600px;margin:0 auto;background:#fff}#PageWrapper.legacy{min-width:980px}#Header .Liner,#Footer .Liner{padding:1px 0}#ExtraWrapper{display:none}#Header{max-width:1600px;margin:0 auto}#Header .Liner{position:relative;z-index:2;min-height:125px;padding-bottom:19%;background:#fff url(sd/image-files/xheader.jpg.pagespeed.ic.0y6ZK0C0zU.webp) no-repeat center top;background-size:cover}#Header .WebsiteName{font-size:36px;width:33%;zoom:1;line-height:1.3;font-variant:small-caps;margin:35px 750px 0 1px;opacity:.56;padding:20px 3px 7px 2%;text-transform:uppercase}#Header .WebsiteName{font-family:Raleway,Arial,Helvetica,sans-serif;font-weight:normal;font-style:normal;font-variant:normal;color:#fff;text-align:left;border:0;background:#e8dbb5 50% 0%}#Header .WebsiteName a{color:#0f0e0c;font-weight:bold}#Header .Tagline{width:33%;background-color:#e8dbb5;font-family:OpenSans,Arial,Helvetica,sans-serif;text-align:left;font-size:21px;color:#32373c;word-spacing:0;letter-spacing:0;font-variant:small-caps;font-weight:bold;margin:0 750px 0 0;opacity:.56;padding:5px 3px 15px 2%;text-transform:uppercase}#ContentColumn{width:66%;float:left}#ContentColumn .Liner{padding:5%}#ContentColumn a:hover{background-color:#fff5cc}#NavColumn{width:33%;float:right}#NavColumn .Liner{padding:5%;background:#ffe}#NavColumn h4{color:#444}#NavColumn p{font-size:75%;padding-bottom:20px}#FooterWrapper{clear:both}#Footer{text-align:center}#Footer .Liner{padding:1.5em 5%;background-color:#32373c}#Footer p{font-size:16px;color:#ababab}#Footer a:hover{color:#fff5cc}.CalloutBox{color:#444;background-color:#fff5cc;font-size:18px;font-style:italic}.CalloutBox a:hover{color:#e67e22}#PageWrapper .CalloutBox p{font-family:OpenSans,Arial,Helvetica,sans-serif;font-size:18px;font-variant:normal;color:#444}.ReminderBox{background-color:#fff5cc;color:#6a6a6a}.RemindeBox p{color:#6a6a6a}.ReminderBox h4{margin-top:1.5em}#PageWrapper .ReminderBox h4{font-family:Raleway,Arial,Helvetica,sans-serif;font-size:20px;font-weight:bold;font-style:normal;font-variant:normal;color:#444;text-align:left;border:0;margin:29px 0 5px 0;background:none}#PageWrapper .ReminderBox p{font-family:OpenSans,Arial,Helvetica,sans-serif;font-size:18px;font-variant:normal;color:#6a6a6a}#PageWrapper div.Navigation a,.Navigation a,#PageWrapper div.Navigation a:visited,.Navigation a:visited{font-size:14px;background:none;color:#e67e22;padding:10px;text-decoration:none;display:block}#PageWrapper div.Navigation a:hover,.Navigation a:hover{background:#fff5cc;color:#d35400;text-decoration:underline}.Navigation h3{color:#444;font-size:111%}#Header .HorizontalNavBar{width:100%;position:absolute;bottom:0;background:#000;zoom:1;filter: alpha(opacity=66);opacity:.66}#PageWrapper div.HorizontalNavBar ul.root{font-size:16px;padding:4px 0 6px 0}#PageWrapper div.HorizontalNavBar ul ul{top:48px;left:-1px;background-color:transparent}#PageWrapper div.HorizontalNavBar li li{border:2px solid transparent;background:transparent;margin-top:-2px}#PageWrapper div.HorizontalNavBar span.navheader,#PageWrapper div.HorizontalNavBar a{margin:2px 0 0 0;color:#fff;line-height:30px;text-transform:uppercase;font-family:Raleway,Arial,Helvetica,sans-serif}#PageWrapper div.HorizontalNavBar span.navheader{padding-left:25px}#PageWrapper div.HorizontalNavBar .hover>span.navheader,#PageWrapper div.HorizontalNavBar span.navheader:hover,#PageWrapper div.HorizontalNavBar a:hover{color:#000;background:#fff5cc}#PageWrapper div.HorizontalNavBar span.navheader ins{left:9px;border-top-color:#fff5cc;border-width:4px}#PageWrapper div.HorizontalNavBar .hover>span.navheader ins,#PageWrapper div.HorizontalNavBar span.navheader:hover ins{border-top-color:#000}#PageWrapper div.HorizontalNavBar ul ul span.navheader,#PageWrapper div.HorizontalNavBar ul ul a{background:#e67e22}#PageWrapper div.HorizontalNavBar ul ul .hover>span.navheader,#PageWrapper div.HorizontalNavBar ul ul span.navheader:hover,#PageWrapper div.HorizontalNavBar ul ul a:hover{color:#fff5cc;background:#d35400}#PageWrapper div.HorizontalNavBar ul ul span.navheader ins{border-color:transparent;border-left-color:#fff5cc;border-width:4px}#PageWrapper div.HorizontalNavBar ul ul .hover>span.navheader ins,#PageWrapper div.HorizontalNavBar ul ul span.navheader:hover ins{border-color:transparent;border-left-color:#fff5cc}@media only screen and (max-width:768px){.ResponsiveNavWrapper .HorizontalNavBar{display:none!important}.ResponsiveNavReady .ResponsiveNavWrapper{text-align:right}.ResponsiveNavReady .ResponsiveNavWrapper:after{content:'';display:block;clear:both}.ResponsiveNavReady .ResponsiveNav{text-align:left;padding-top:40px;padding-bottom:40px;background:#fff;width:100%;position:absolute;left:-100%;top:0;z-index:2;min-height:100%;box-sizing:border-box}.ResponsiveNavReady .ResponsiveNav{transition:left .5s ease}.ResponsiveNavActive .ResponsiveNav{left:0}.ResponsiveNavActivated #PageWrapper{overflow:hidden}.ResponsiveNavReady .ResponsiveNav ul{border-left:1px solid #ccc;margin-bottom:10px;padding-left:30px;list-style:none}.ResponsiveNavReady .ResponsiveNav .navheader{font-family:Raleway,Arial,Helvetica,sans-serif;font-size:22px;font-weight:bold;font-style:normal;text-align:left;text-transform:uppercase;background:transparent;margin:10px 0}.ResponsiveNavReady .ResponsiveNav a{display:block}.ResponsiveNavReady .ResponsiveNavButton{display:table;height:45px;padding:0 .5em;color:#fff;text-transform:uppercase;text-align:center;cursor:pointer;position:relative;z-index:1;font-size:18px;line-height:1.4;font-weight:normal;background:#e67e22;border:none;margin:5% auto}.ResponsiveNavReady .ResponsiveNavButton:hover{color:#fff;background-color:#d35400}.ResponsiveNavActive .ResponsiveNavButton{color:#fff;background-color:#e67e22;margin:5% 0}.ResponsiveNavReady .ResponsiveNavButton span{display:table-cell;vertical-align:middle;text-align:center}.ResponsiveNavReady .ResponsiveNavButton:hover{background:#d35400}.ResponsiveNavActive .ResponsiveNavButton{font-size:18px;width:45px;padding:0;position:fixed!important;top:10px;right:10px;z-index:3}}#NavColumn .formbody input[type="text"],#NavColumn .formbody textarea,#NavColumn .formbody img{max-width:155px}input[type="text"]{border:1px solid gray}#PageWrapper .WhatsNew h2{font-family:Raleway,Arial,Helvetica,sans-serif;font-weight:bold;font-style:normal;font-variant:normal;color:#9f9f9f;border-top:0;border-right:0;border-bottom:1px solid #eee;border-left:0;background:none}#PageWrapper .WhatsNew h3{font-family:Raleway,Arial,Helvetica,sans-serif;font-size:23px;font-weight:bold;font-style:normal;font-variant:normal;text-align:left;border:0;margin:22px 0 0 0;padding:0;background:none}.WhatsNew,#PageWrapper .WhatsNew ol li{border-color:#ddd}#PageWrapper .WhatsNew h2{color:#9f9f9f;background:transparent;text-align:left;padding:1em;border-bottom:1px solid #eee}.WhatsNew-time{color:#9f9f9f}#PageWrapper .WhatsNew-subscribe ul{background:#fff}.questionMark{font-size:111%;color:#444;font-weight:bold}.Ezine{padding:6%;border:none;background:#32373c}.EzineInput input{width:67%;padding:10px;color:#fff}.Ezine input[type="text"]{background-color:#32373c}.Ezine input:focus[type="text"]{background-color:#3c4146}td.EzineLabel{font-size:18px;color:#a8a8a8;text-transform:uppercase}td.EzineLabelAbove{text-align:center}.EzineDescription{text-align:center}.TOC dt{font-size:18px}.Ezine2{padding:4%;background:#32373c;border:0}.Ezine2 label{font-size:18px;color:#a8a8a8;text-transform:uppercase;margin:5px}.Ezine2 input[type="text"],.Ezine2 input[type="email"]{padding:10px;color:#fff;background-color:#32373c;border:1px solid gray;margin:5px}.Ezine2 input:focus[type="text"],.Ezine2 input:focus[type="email"]{background-color:#3c4146}.EzineButton{border:0;margin:5px;padding:.5em;color:#fff;text-transform:uppercase;font-size:18px;line-height:1.4;font-weight:normal;background:#e67e22}.EzineButton:hover{background-color:#d35400}.mobileOnly{display:none!important}@media only screen and (max-width:447px){.desktopOnly{display:none!important}.mobileOnly{display:block!important}}@media only screen and (max-width:1200px){.modern #Header .WebsiteName{font-size:32px}.modern #Header .Tagline{font-size:16px}}@media only screen and (max-width:980px){#PageWrapper.modern{margin-top:0;margin-bottom:0}.modern #Header .WebsiteName{width:50%}.modern #Header .Tagline{width:50%}}@media only screen and (max-width:768px){.modern #NavColumn,.modern #ContentColumn{float:none;width:100%}.modern #Header .Liner{text-align:center;padding-bottom:1px}}#PageWrapper .BreadcrumbBlock .BreadcrumbTiers{list-style:none;margin:30px 0 0;padding:0}#PageWrapper .BreadcrumbBlock .BreadcrumbTiers .BreadcrumbItem{display:inline-block}#PageWrapper .BreadcrumbBlock .BreadcrumbTiers .BreadcrumbItem+.BreadcrumbItem::before{color:#000;content:">"}#PageWrapper .BreadcrumbBlock.BreadcrumbBlockRight .BreadcrumbTiers{text-align:right}#PageWrapper .BreadcrumbBlock.BreadcrumbBlockLeft .BreadcrumbTiers{text-align:left}#PageWrapper .BreadcrumbBlock.BreadcrumbBlockCenter .BreadcrumbTiers{text-align:center}.SocialDestinations span{display:none}.SocialShare .socialIcon:hover{text-decoration:none}.SocialShare .socialIcon{line-height:2em;white-space:nowrap;display:inline-block}#PageWrapper .SocialShare .socialIcon.twitter{color:#28a9e0}#PageWrapper .SocialShare .socialIcon.facebook{color:#3b579d}#PageWrapper .SocialShare .socialIcon.pinterest{color:#cd1d1f}#PageWrapper .SocialShare .socialIcon.tumblr{color:#35465c}#PageWrapper .SocialShare .socialIcon.reddit{color:#ff4500}#PageWrapper .SocialShare .socialIcon.whatsapp{color:#25d366}#PageWrapper .SocialShare .socialIcon.messenger{color:#0078ff}#PageWrapper .SocialShare .socialIcon.google-plus{color:#df4a32}.SocialShare.SocialShareSticky.SocialShareStickyRightNoTranslation a,.SocialShare.SocialShareSticky.SocialShareStickyRight a,.SocialShare.SocialShareSticky.SocialShareStickyLeft a,.SocialShare.SocialShareSticky label{display:block}.SocialShare.SocialShareSticky.SocialShareStickyTop a,.SocialShare.SocialShareSticky.SocialShareStickyBottom a,.SocialShare.SocialShareSticky label{display:inline-block;vertical-align:middle}.SocialShare.SocialShareSticky.SocialShareStickyRight.hidden,.SocialShare.SocialShareSticky.SocialShareStickyRightNoTranslation.hidden{transform:translateY(-50%) translateX(100%)}.SocialShare.SocialShareSticky.SocialShareStickyLeft.hidden{transform:translateY(-50%) translateX(-100%)}.SocialShare.SocialShareSticky.SocialShareStickyTop.hidden{transform:translateY(-100%) translateX(-50%)}.SocialShare.SocialShareSticky.SocialShareStickyBottom.hidden{transform:translateY(100%) translateX(-50%)}.SocialShareSticky.SocialShareStickyRight.hidden .hideButton,.SocialShareSticky.SocialShareStickyRightNoTranslation.hidden .hideButton{left:-35px;-ms-transform:rotate(.75turn);transform:rotate(.75turn)}.SocialShareSticky.SocialShareStickyLeft.hidden .hideButton{right:-35px;-ms-transform:rotate(-.75turn);transform:rotate(-.75turn)}.SocialShareSticky.SocialShareStickyTop.hidden .hideButton{top:30px;-ms-transform:rotate(.5turn);transform:rotate(.5turn)}.SocialShareSticky.SocialShareStickyBottom.hidden .hideButton{bottom:30px;-ms-transform:rotate(1turn);transform:rotate(1turn)}.SocialShareSticky .hideButton{cursor:pointer;border:0;position:absolute;right:0;width:51px;height:51px;padding:20px}.SocialShareStickyRight .hideButton,.SocialShareStickyRightNoTranslation .hideButton{-ms-transform:rotate(.25turn);transform:rotate(.25turn)}.SocialShareStickyLeft .hideButton{-ms-transform:rotate(-.25turn);transform:rotate(-.25turn)}.SocialShareSticky.SocialShareStickyTop .hideButton{right:-47px;top:0}.SocialShareSticky.SocialShareStickyBottom .hideButton{right:-47px;bottom:0;-ms-transform:rotate(.50turn);transform:rotate(.50turn)}.SocialShareSticky{position:fixed;right:0;top:50%;padding:5px;z-index:9999;background:#fff;text-align:center}.SocialShare.SocialShareMini span,.SocialShare.SocialShareSticky span{display:none}.SocialShareSticky.SocialShareStickyRightNoTranslation{right:0;left:auto;top:25%;border-radius:5px 0 0 5px;border-right:none!important}.SocialShareSticky.SocialShareStickyRight{right:0;left:auto;border-radius:5px 0 0 5px;transform:translateY(-50%);border-right:none!important}.SocialShareSticky.SocialShareStickyTop{right:auto;left:50%;top:0;border-radius:0 0 5px 5px;transform:translateX(-50%);border-top:none!important}.SocialShareSticky.SocialShareStickyBottom{right:auto;left:50%;bottom:0;top:auto;border-radius:5px 5px 0 0;transform:translateX(-50%);border-bottom:none!important}.SocialShareSticky.SocialShareStickyLeft{left:0;right:auto;border-radius:0 5px 5px 0;transform:translateY(-50%);border-left:none!important}.socialize-pay-it-forward-wrapper{padding:.5em;margin:2px}.socialize-pay-it-forward-wrapper details{text-align:left}.socialize-pay-it-forward-wrapper summary{cursor:pointer;text-align:center;outline:none;list-style:none;text-decoration:none}.socialize-pay-it-forward-wrapper summary:hover{text-decoration:underline}.socialize-pay-it-forward-wrapper summary::-webkit-details-marker{display:none}.socialIcon svg{margin-left:3px;margin-right:3px;height:2em;width:2em;display:inline-block;vertical-align:middle}.FAQContainer{padding:20px 0}.FAQContainer .AccordionContainer summary{font-size:22px;margin-top:0;padding:10px 0;list-style:none}.FAQContainer .AccordionContainer summary .AccordionHeader{cursor:pointer}.FAQContainer .AccordionContainer summary::-webkit-details-marker{display:none}.FAQContainer .AccordionContainer summary .AccordionHeader:before{content:"\25BA";float:left;margin-right:5px;font-size:.7em;line-height:2em}.FAQContainer .AccordionContainer[open] .AccordionHeader:before{content:"\25BC"}.FAQContainer.disabled .AccordionContainer summary .AccordionHeader:before{display:none}.FAQContainer .AccordionContainer summary .AccordionHeader p{display:block;margin:0;padding:0}.FAQContainer.disabled .AccordionContainer summary::marker{content:'';display:block}.FAQContainer.disabled .AccordionContainer summary{pointer-events:none}@media (max-width:768px){.imagePreview img{height:auto}}.c2Form{padding:8px;border:1px solid #ddd}.c2Form input[type="text"]{max-width:100%}@media only screen and (max-width:440px){.c2Form table,.c2Form tr,.c2Form tbody,.c2Form td{display:block}.c2Form table p{text-align:left!important}.otherText{display:block}}.InvShelp{font-family:Arial,Helvetica,sans-serif;font-size:12px;background-color:#ffc}.InvShelpT{background:#ddd;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;margin:0;padding:0;text-align:left}a:link.InvShelp{text-decoration:none;color:#000}.InvShelpbox{font-family:Arial,Helvetica,sans-serif;font-size:12px;background-color:#ffc;padding:2px;border:1px solid #666}.InvSquestions{font-weight:bold;font-size:14px;margin:0}.titleInput{width:80%;padding-top:4px;margin:0}.storyInput{width:98%;padding-top:4px;margin:0}.otherText{}.dividerRule{border-top:1px solid #ddd}.blogItItem .blogItThumbnail{float:left;margin-right:10px;margin-bottom:10px;max-width:150px}.blogItItem .blogItReadMore{clear:both}#PageWrapper .SocialShare .socialIcon.twitter{color:#000}.YtFacade{position:relative}.YtFacade iframe{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.YtFacade img{width:100%;height:100%;z-index:2;object-fit:cover}.YtFacade svg{position:absolute;top:50%;left:50%;width:68px;height:48px;margin-top:-24px;margin-left:-34px;z-index:3}.YtFacadeButton{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;cursor:pointer}#PageWrapper .WhatsNew-subscribe ul{padding:4px}#PageWrapper .WhatsNew-subscribe ul img{margin:4px}body,html.mobile body{background-image:none;font-family:OpenSans,Arial,Helvetica,sans-serif}#PageWrapper #Footer .Liner p,html.mobile #PageWrapper #Footer .Liner p{color:#fff}body,html.mobile body{background-image:none;font-family:OpenSans,Arial,Helvetica,sans-serif}#PageWrapper #Footer .Liner p,html.mobile #PageWrapper #Footer .Liner p{color:#fff}#PageWrapper #Footer .Liner,html.mobile #PageWrapper #Footer .Liner{background-color:#6a9e95}#Footer{background:transparent}#PageWrapper #Header .Liner,html.mobile #PageWrapper #Header .Liner{background-color:#fff;background-image:url(sd/image-files/xlogo-from-doris-255k.jpg.pagespeed.ic.Ojth3gfJPG.webp);background-position:50% 50%;background-size:100% auto;min-height:163px}#PageWrapper #NavColumn .Liner,html.mobile #PageWrapper #NavColumn .Liner{background-color:#fff;font-family:Work\ Sans,Arial,Helvetica,sans-serif}#PageWrapper #ContentColumn,html.mobile #PageWrapper #ContentColumn{color:#32373c;font-family:Work\ Sans,Arial,Helvetica,sans-serif;font-size:20px;line-height:31px}#PageWrapper,html.mobile #PageWrapper{padding-bottom:0}#PageWrapper h1,html.mobile #PageWrapper h1{color:#2e6585;font-family:Raleway,Arial,Helvetica,sans-serif}#PageWrapper h2,html.mobile #PageWrapper h2{color:#2e6585;font-family:Raleway,Arial,Helvetica,sans-serif}#PageWrapper h3,html.mobile #PageWrapper h3{border-bottom-width:1px;border-color:#fff;border-left-width:1px;border-right-width:1px;border-style:solid;border-top-width:1px;color:#2e6585;font-family:Raleway,Arial,Helvetica,sans-serif}#PageWrapper h4,html.mobile #PageWrapper h4{color:#2e6585;font-family:Raleway,Arial,Helvetica,sans-serif}#PageWrapper #Header .HorizontalNavBar,html.mobile #PageWrapper #Header .HorizontalNavBar{background-color:#000;background-position:0% 100%;border-bottom-width:0;border-color:#000;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:0}#PageWrapper div.HorizontalNavBar ul a,html.mobile #PageWrapper div.HorizontalNavBar ul a{font-family:Work\ Sans,Arial,Helvetica,sans-serif;font-size:19px}#PageWrapper div.HorizontalNavBar ul a:link,html.mobile #PageWrapper div.HorizontalNavBar ul a:link{background-color:transparent;color:#fff}#PageWrapper div.HorizontalNavBar ul a:hover,html.mobile #PageWrapper div.HorizontalNavBar ul a:hover{background-color:#000;color:#fff}#PageWrapper div.HorizontalNavBar ul span.navheader,html.mobile #PageWrapper div.HorizontalNavBar ul span.navheader{background-color:transparent;color:#fff;font-family:Work\ Sans,Arial,Helvetica,sans-serif;font-size:19px;padding-left:18px}#PageWrapper div.HorizontalNavBar ul span.navheader:hover,#PageWrapper div.HorizontalNavBar li:hover>span.navheader,#PageWrapper div.HorizontalNavBar .hover>span.navheader,html.mobile #PageWrapper div.HorizontalNavBar ul span.navheader:hover,#PageWrapper div.HorizontalNavBar li:hover>span.navheader,#PageWrapper div.HorizontalNavBar .hover>span.navheader{background-color:#000;color:#fff}#PageWrapper div.HorizontalNavBar ul span.navheader ins,html.mobile #PageWrapper div.HorizontalNavBar ul span.navheader ins{border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;border-width:6px;margin-top:-2px}#PageWrapper div.HorizontalNavBar ul span.navheader:hover ins,#PageWrapper div.HorizontalNavBar ul li:hover>span.navheader ins,#PageWrapper div.HorizontalNavBar ul .hover>span.navheader ins,html.mobile #PageWrapper div.HorizontalNavBar ul span.navheader:hover ins,#PageWrapper div.HorizontalNavBar ul li:hover>span.navheader ins,#PageWrapper div.HorizontalNavBar ul .hover>span.navheader ins{border-bottom-color:#000;border-left-color:#000;border-right-color:#000}#PageWrapper div.HorizontalNavBar ul ul a,html.mobile #PageWrapper div.HorizontalNavBar ul ul a{padding-right:undefinedpx}#PageWrapper div.HorizontalNavBar ul ul a:link,html.mobile #PageWrapper div.HorizontalNavBar ul ul a:link{background-color:#2e6585;color:#fff}#PageWrapper div.HorizontalNavBar ul ul a:visited,html.mobile #PageWrapper div.HorizontalNavBar ul ul a:visited{background-color:#77bde6}#PageWrapper div.HorizontalNavBar ul ul a:hover,html.mobile #PageWrapper div.HorizontalNavBar ul ul a:hover{background-color:#2e6585;color:#e3e3e3}#PageWrapper div.HorizontalNavBar ul ul span.navheader,html.mobile #PageWrapper div.HorizontalNavBar ul ul span.navheader{background-color:#2e6585;color:#fff;padding-right:undefinedpx}#PageWrapper div.HorizontalNavBar ul ul span.navheader:hover,#PageWrapper div.HorizontalNavBar ul ul li:hover>span.navheader,html.mobile #PageWrapper div.HorizontalNavBar ul ul span.navheader:hover,#PageWrapper div.HorizontalNavBar ul ul li:hover>span.navheader{background-color:#2e6585;color:#e3e3e3}#PageWrapper div.HorizontalNavBar ul ul span.navheader ins,html.mobile #PageWrapper div.HorizontalNavBar ul ul span.navheader ins{border-bottom-color:transparent;border-left-color:#2e6585;border-right-color:transparent;border-top-color:transparent;border-width:0;margin-top:0}#PageWrapper div.HorizontalNavBar ul ul span.navheader:hover ins,html.mobile #PageWrapper div.HorizontalNavBar ul ul span.navheader:hover ins{border-bottom-color:#000;border-left-color:red;border-right-color:#000;border-top-color:#000}#ContentColumn ul li,html.mobile #ContentColumn ul li{color:#666}#PageWrapper .CalloutBox p,html.mobile #PageWrapper .CalloutBox p{font-family:Work\ Sans,Arial,Helvetica,sans-serif}#PageWrapper .CalloutBox,html.mobile #PageWrapper .CalloutBox{background-color:#d3e7f2;color:#fff;font-family:Work\ Sans,Arial,Helvetica,sans-serif}#PageWrapper .ReminderBox,html.mobile #PageWrapper .ReminderBox{background-color:#ededed;box-shadow:3px 3px 3px 0 #ccc}#PageWrapper .ReminderBox h4,html.mobile #PageWrapper .ReminderBox h4{color:#2e6585;font-family:Raleway,Arial,Helvetica,sans-serif}#PageWrapper .ReminderBox p,html.mobile #PageWrapper .ReminderBox p{background-color:transparent;color:#32373c;font-family:Work\ Sans,Arial,Helvetica,sans-serif}#ContentColumn a:not([data-pin-href]):link, html.mobile #ContentColumn a:not([data-pin-href]):link {color:#4293c2}#ContentColumn a:visited,html.mobile #ContentColumn a:visited{color:#77bde6}#ContentColumn a:not([data-pin-href]):hover, html.mobile #ContentColumn a:not([data-pin-href]):hover {background-color:transparent;color:#32373c}#PageWrapper #Footer a:link,html.mobile #PageWrapper #Footer a:link{color:#fff}#PageWrapper #Footer a:visited,html.mobile #PageWrapper #Footer a:visited{color:#9bc5de}#PageWrapper #Footer a:hover,html.mobile #PageWrapper #Footer a:hover{color:#32373c}#NavColumn a:link,html.mobile #NavColumn a:link{color:#4293c2}#NavColumn a:visited,html.mobile #NavColumn a:visited{color:#77bde6}#NavColumn a:hover,html.mobile #NavColumn a:hover{color:#32373c}#PageWrapper .ReminderBox a:link,html.mobile #PageWrapper .ReminderBox a:link{color:#4293c2}#PageWrapper .ReminderBox a:visited,html.mobile #PageWrapper .ReminderBox a:visited{color:#77bde6}#PageWrapper .CalloutBox a:link,html.mobile #PageWrapper .CalloutBox a:link{color:#4293c2}#PageWrapper .CalloutBox a:visited,html.mobile #PageWrapper .CalloutBox a:visited{color:#77bde6}#PageWrapper .CalloutBox a:hover,html.mobile #PageWrapper .CalloutBox a:hover{color:#32373c}#PageWrapper .WhatsNew h2,html.mobile #PageWrapper .WhatsNew h2{color:#2e6585;font-family:Raleway,Arial,Helvetica,sans-serif}#PageWrapper .WhatsNew .WhatsNew-time,html.mobile #PageWrapper .WhatsNew .WhatsNew-time{font-family:Work\ Sans,Arial,Helvetica,sans-serif}#PageWrapper .WhatsNew .WhatsNew-content,html.mobile #PageWrapper .WhatsNew .WhatsNew-content{font-family:Work\ Sans,Arial,Helvetica,sans-serif}#PageWrapper .WhatsNew h3 a:link,html.mobile #PageWrapper .WhatsNew h3 a:link{color:#2e6585}#PageWrapper .WhatsNew h3 a:visited,html.mobile #PageWrapper .WhatsNew h3 a:visited{color:#2e6585}#PageWrapper .WhatsNew h3 a:hover,html.mobile #PageWrapper .WhatsNew h3 a:hover{color:#32373c}#PageWrapper .WhatsNew h3,html.mobile #PageWrapper .WhatsNew h3{font-family:Raleway,Arial,Helvetica,sans-serif}#PageWrapper .WhatsNew .WhatsNew-more a,html.mobile #PageWrapper .WhatsNew .WhatsNew-more a{color:#6a9e95}#PageWrapper .WhatsNew .WhatsNew-more a:link,html.mobile #PageWrapper .WhatsNew .WhatsNew-more a:link{color:#6a9e95}#PageWrapper .WhatsNew .WhatsNew-more a:visited,html.mobile #PageWrapper .WhatsNew .WhatsNew-more a:visited{color:#04856d}#PageWrapper .WhatsNew h2 a:link,html.mobile #PageWrapper .WhatsNew h2 a:link{color:#2e6585}#PageWrapper .WhatsNew h2 a:visited,html.mobile #PageWrapper .WhatsNew h2 a:visited{color:#04856d}#PageWrapper .WhatsNew h2 a:hover,html.mobile #PageWrapper .WhatsNew h2 a:hover{color:#32373c}#PageWrapper #HeaderWrapper,html.mobile #PageWrapper #HeaderWrapper{background-color:transparent;background-image:none;background-position:50% 50%;background-size:100% auto}#PageWrapper .ImageBlock a:link span,html.mobile #PageWrapper .ImageBlock a:link span{color:#4293c2}#PageWrapper .ImageBlock a:visited span,html.mobile #PageWrapper .ImageBlock a:visited span{color:#77bde6}#PageWrapper #Header .WebsiteName,html.mobile #PageWrapper #Header .WebsiteName{background-color:transparent;background-position:0% 100%;font-family:TrajanRegular;font-size:0;line-height:47px;margin-bottom:6px;margin-left:0;margin-right:760px;margin-top:134px;opacity:.56;padding-bottom:17px;padding-left:16px;padding-right:39px;padding-top:19px;text-transform:capitalize;word-spacing:0}#PageWrapper #Header .Tagline,html.mobile #PageWrapper #Header .Tagline{background-color:transparent;color:#fff;font-family:OpenSans,Arial,Helvetica,sans-serif;font-size:0;line-height:24px;margin-bottom:4px;margin-left:0;opacity:.56;padding-bottom:6px;padding-left:19px;padding-right:33px;padding-top:0}#PageWrapper #Header .WebsiteName a,html.mobile #PageWrapper #Header .WebsiteName a{background-color:transparent;color:#fff;font-weight:bold}#PageWrapper #Header .WebsiteName a:link,html.mobile #PageWrapper #Header .WebsiteName a:link{background-color:transparent;color:#fff;font-weight:bold}#PageWrapper #Header .WebsiteName a:visited,html.mobile #PageWrapper #Header .WebsiteName a:visited{background-color:transparent;color:#fff}#PageWrapper #Header .WebsiteName a:hover,html.mobile #PageWrapper #Header .WebsiteName a:hover{color:#e3e3e3;font-weight:normal}body #PageWrapper .Ezine2,body #PageWrapper .Ezine,html.mobile body #PageWrapper .Ezine2,body #PageWrapper .Ezine{background-color:#ededed;color:#fff}body #PageWrapper .Ezine2 .EzineRow label,html.mobile body #PageWrapper .Ezine2 .EzineRow label{color:#32373c}body #PageWrapper .Ezine2 .EzineRow input[type="text"],html.mobile body #PageWrapper .Ezine2 .EzineRow input[type="text"]{background-color:#fff;color:#666;font-family:Arial,Helvetica}body #PageWrapper .Ezine2 .EzineRow input[type="email"],html.mobile body #PageWrapper .Ezine2 .EzineRow input[type="email"]{background-color:#fff;color:#666;font-family:Arial,Helvetica}#PageWrapper .Ezine2 .EzineButton,html.mobile #PageWrapper .Ezine2 .EzineButton{background-color:#4293c2;color:#fff;font-family:Arial,Helvetica}#PageWrapper .Ezine2 a,html.mobile #PageWrapper .Ezine2 a{color:#4293c2}#PageWrapper .Ezine2 a:link,html.mobile #PageWrapper .Ezine2 a:link{color:#4293c2}@media (max-width:768px){#PageWrapper #Header .Liner{min-height:110px}#PageWrapper #ContentColumn .Liner{margin-bottom:21px;margin-top:0;padding-bottom:25px;padding-top:37px}#PageWrapper h1{margin-top:0}#PageWrapper .ResponsiveNavButton{background-position:50% 100%}#PageWrapper #HeaderWrapper{background-position:0% 0%}#PageWrapper #Header .WebsiteName{background-color:transparent;border-bottom-width:0;border-color:#000;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:0;font-size:0;line-height:41px;margin-bottom:8px;margin-left:0;margin-right:751px;margin-top:28px;opacity:.36;padding-bottom:7px;padding-left:11px;padding-right:4px;word-spacing:-4px}#PageWrapper #Header .Tagline{background-color:transparent;font-size:0;line-height:21px;margin-left:0;margin-right:750px;margin-top:0;opacity:.36;padding-bottom:5px;padding-left:15px;padding-right:0;padding-top:0}#PageWrapper #Header .WebsiteName a:visited{color:#fff}#PageWrapper #Header .WebsiteName a:hover{color:#e3e3e3}}@media (max-width:447px){#PageWrapper #Header .Liner{min-height:96px}#PageWrapper #ContentColumn .Liner{padding-top:21px}#PageWrapper h1{font-family:OpenSans,Arial,Helvetica,sans-serif;margin-bottom:4px;margin-top:0}#PageWrapper #HeaderWrapper{background-color:transparent}#PageWrapper #Header .WebsiteName{background-color:transparent;font-size:0;line-height:32px;margin-left:0;margin-right:760px;margin-top:16px;opacity:.36;padding-bottom:6px;padding-left:10px;padding-right:30px;padding-top:11px}#PageWrapper #Header .Tagline{background-color:transparent;background-position:100% 0%;color:#fff;font-size:0;line-height:17px;margin-bottom:0;margin-left:0;opacity:.36;padding-bottom:0;padding-left:17px;padding-right:23px;padding-top:0}#PageWrapper #Header .WebsiteName a:visited{color:#fff}#PageWrapper #Header .WebsiteName a:hover{color:#e3e3e3}}.Navigation h3,html.mobile .Navigation h3{font-family:Raleway,Arial,Helvetica,sans-serif;color:#2e6585}html.mobile .Navigation h3{}@media (max-width:768px){.Navigation h3{}}@media (max-width:447px){.Navigation h3{}}#PageWrapper .Navigation h3,html.mobile #PageWrapper .Navigation h3{font-family:Raleway,Arial,Helvetica,sans-serif;color:#2e6585}html.mobile #PageWrapper .Navigation h3{}@media (max-width:768px){#PageWrapper .Navigation h3{}}@media (max-width:447px){#PageWrapper .Navigation h3{}}body #PageWrapper div.Navigation h3,html.mobile body #PageWrapper div.Navigation h3{font-family:Raleway,Arial,Helvetica,sans-serif;color:#2e6585}html.mobile body #PageWrapper div.Navigation h3{}@media (max-width:768px){body #PageWrapper div.Navigation h3{}}@media (max-width:447px){body #PageWrapper div.Navigation h3{}}.Navigation a,html.mobile .Navigation a{font-size:19px;font-family:Raleway,Arial,Helvetica,sans-serif;font-family:Raleway,Arial,Helvetica,sans-serif}html.mobile .Navigation a{}@media (max-width:768px){.Navigation a{}}@media (max-width:447px){.Navigation a{}}#PageWrapper div.Navigation a,html.mobile #PageWrapper div.Navigation a{font-size:19px;font-family:Raleway,Arial,Helvetica,sans-serif;font-family:Raleway,Arial,Helvetica,sans-serif}html.mobile #PageWrapper div.Navigation a{}@media (max-width:768px){#PageWrapper div.Navigation a{}}@media (max-width:447px){#PageWrapper div.Navigation a{}}.Navigation a,#PageWrapper div.Navigation a{}html.mobile .Navigation a,html.mobile #PageWrapper div.Navigation a{}.Navigation a:link,html.mobile .Navigation a:link{color:#4293c2;background-color:transparent}html.mobile .Navigation a:link{}@media (max-width:768px){.Navigation a:link{}}@media (max-width:447px){.Navigation a:link{}}#PageWrapper div.Navigation a:link,html.mobile #PageWrapper div.Navigation a:link{color:#4293c2;background-color:transparent}html.mobile #PageWrapper div.Navigation a:link{}@media (max-width:768px){#PageWrapper div.Navigation a:link{}}@media (max-width:447px){#PageWrapper div.Navigation a:link{}}.Navigation a:visited,html.mobile .Navigation a:visited{background-color:transparent;color:#77bde6}html.mobile .Navigation a:visited{}@media (max-width:768px){.Navigation a:visited{}}@media (max-width:447px){.Navigation a:visited{}}#PageWrapper div.Navigation a:visited,html.mobile #PageWrapper div.Navigation a:visited{background-color:transparent;color:#77bde6}html.mobile #PageWrapper div.Navigation a:visited{}@media (max-width:768px){#PageWrapper div.Navigation a:visited{}}@media (max-width:447px){#PageWrapper div.Navigation a:visited{}}.Navigation a:hover,html.mobile .Navigation a:hover{background-color:transparent;color:#32373c}html.mobile .Navigation a:hover{}@media (max-width:768px){.Navigation a:hover{}}@media (max-width:447px){.Navigation a:hover{}}#PageWrapper div.Navigation a:hover,html.mobile #PageWrapper div.Navigation a:hover{background-color:transparent;color:#32373c}html.mobile #PageWrapper div.Navigation a:hover{}@media (max-width:768px){#PageWrapper div.Navigation a:hover{}}@media (max-width:447px){#PageWrapper div.Navigation a:hover{}}#PageWrapper .Ezine{padding:4px 0}.page_footer_container{width:100%;max-width:500px;margin:12px auto}.page_footer_content{width:100%;text-align:center;background-color:#fff}.page_footer_liner{padding:12px}.page_footer_divider_above{margin:0 auto}.page_footer_divider_below{margin:0 auto}.page_footer_text,.page_footer_text a{font-family:NovareseRegular;font-size:14px;color:#009;text-align:center;padding:12px 0}.powered_by_sbi_banner{width:100%;max-width:500px;margin:0 auto;text-align:center}#PageWrapper #Header .Liner{padding-bottom:55px!important}@media only screen and (min-width:1024px){#ContentColumn{max-width:calc(100% - 335px)}#NavColumn{min-width:335px}#NavColumn .Liner div:first-child{float:none;width:100%}}@media only screen and (max-width:1023px){#ContentColumn,#NavColumn{max-width:100%;width:100%}#NavColumn .Liner div:first-child{float:none;width:100%}}@media only screen and (max-width:359px){#ContentColumn .Liner{padding:10px!important}}.ResponsiveNavReady .ResponsiveNavButton{top:20px;right:20px;margin:0 auto;position:absolute}#PageWrapper #ContentColumn ul{color:#000}.variantFullSizeContentColumn #ContentWrapper{padding-left:0;padding-right:0;width:100%}.variantFullSizeContentColumn #PageWrapper #ContentColumn{width:100%;float:none}.variantFullSizeContentColumn #NavWrapper{display:none}.variantFullSizeContentColumn #ExtraWrapper{display:none}.variantNoHeader #HeaderWrapper{display:none}.variantNoFooter #FooterWrapper{display:none}.variantNoExtraColumn #ExtraWrapper{display:none}.variantNoNavColumn #NavWrapper{display:none} \ No newline at end of file diff --git a/Free Lead Sheets for All Instruments and Voices!_files/O Fortuna.pdf b/Free Lead Sheets for All Instruments and Voices!_files/O Fortuna.pdf deleted file mode 100644 index 9cb9885..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/O Fortuna.pdf and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xall-the-pretty-little-horses-key-of-am-fixed-copyright.gif.pagespeed.ic.Yxn8QmQ2Z8.webp b/Free Lead Sheets for All Instruments and Voices!_files/xall-the-pretty-little-horses-key-of-am-fixed-copyright.gif.pagespeed.ic.Yxn8QmQ2Z8.webp deleted file mode 100644 index 89b2d7c..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xall-the-pretty-little-horses-key-of-am-fixed-copyright.gif.pagespeed.ic.Yxn8QmQ2Z8.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xall-through-the-night-lead-g.jpg.pagespeed.ic.PAI3epumyG.webp b/Free Lead Sheets for All Instruments and Voices!_files/xall-through-the-night-lead-g.jpg.pagespeed.ic.PAI3epumyG.webp deleted file mode 100644 index 6458123..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xall-through-the-night-lead-g.jpg.pagespeed.ic.PAI3epumyG.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xall-you-that-in-this-house-em.gif.pagespeed.ic.DRaqG9KE8h.webp b/Free Lead Sheets for All Instruments and Voices!_files/xall-you-that-in-this-house-em.gif.pagespeed.ic.DRaqG9KE8h.webp deleted file mode 100644 index 4de1b08..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xall-you-that-in-this-house-em.gif.pagespeed.ic.DRaqG9KE8h.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xamazing-grace-lead.gif.pagespeed.ic.1QEd6r-a0N.webp b/Free Lead Sheets for All Instruments and Voices!_files/xamazing-grace-lead.gif.pagespeed.ic.1QEd6r-a0N.webp deleted file mode 100644 index 8b4195e..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xamazing-grace-lead.gif.pagespeed.ic.1QEd6r-a0N.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xamerica-lead-sheet-bass-clef.gif.pagespeed.ic.g3SRtZtfLW.webp b/Free Lead Sheets for All Instruments and Voices!_files/xamerica-lead-sheet-bass-clef.gif.pagespeed.ic.g3SRtZtfLW.webp deleted file mode 100644 index 7d43ede..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xamerica-lead-sheet-bass-clef.gif.pagespeed.ic.g3SRtZtfLW.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xamerica-lead-sheet.png.pagespeed.ic.4SvHtppfMp.webp b/Free Lead Sheets for All Instruments and Voices!_files/xamerica-lead-sheet.png.pagespeed.ic.4SvHtppfMp.webp deleted file mode 100644 index fb8cc67..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xamerica-lead-sheet.png.pagespeed.ic.4SvHtppfMp.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xamerica-the-beautiful.gif.pagespeed.ic.SnFoD_KZbW.webp b/Free Lead Sheets for All Instruments and Voices!_files/xamerica-the-beautiful.gif.pagespeed.ic.SnFoD_KZbW.webp deleted file mode 100644 index 732ce69..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xamerica-the-beautiful.gif.pagespeed.ic.SnFoD_KZbW.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xanchors-aweigh-lead-sheet-viola-clef.gif.pagespeed.ic.7dYXeQD-AS.webp b/Free Lead Sheets for All Instruments and Voices!_files/xanchors-aweigh-lead-sheet-viola-clef.gif.pagespeed.ic.7dYXeQD-AS.webp deleted file mode 100644 index 74a10ac..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xanchors-aweigh-lead-sheet-viola-clef.gif.pagespeed.ic.7dYXeQD-AS.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xangels-we-have-heard-lead-sheet.png.pagespeed.ic.gfid7UPUTs.webp b/Free Lead Sheets for All Instruments and Voices!_files/xangels-we-have-heard-lead-sheet.png.pagespeed.ic.gfid7UPUTs.webp deleted file mode 100644 index 2b9db43..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xangels-we-have-heard-lead-sheet.png.pagespeed.ic.gfid7UPUTs.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xants-go-marching-lead-dm.gif.pagespeed.ic.xQsKGIGCCx.webp b/Free Lead Sheets for All Instruments and Voices!_files/xants-go-marching-lead-dm.gif.pagespeed.ic.xQsKGIGCCx.webp deleted file mode 100644 index 047b92a..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xants-go-marching-lead-dm.gif.pagespeed.ic.xQsKGIGCCx.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xauld-lang-syne-lead-simpler-chords-f.jpg.pagespeed.ic.Tpln7R7SAp.webp b/Free Lead Sheets for All Instruments and Voices!_files/xauld-lang-syne-lead-simpler-chords-f.jpg.pagespeed.ic.Tpln7R7SAp.webp deleted file mode 100644 index 5223592..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xauld-lang-syne-lead-simpler-chords-f.jpg.pagespeed.ic.Tpln7R7SAp.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xaura-lea-guitar-page-1.jpg.pagespeed.ic.qJoR73K5hJ.webp b/Free Lead Sheets for All Instruments and Voices!_files/xaura-lea-guitar-page-1.jpg.pagespeed.ic.qJoR73K5hJ.webp deleted file mode 100644 index f6219b2..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xaura-lea-guitar-page-1.jpg.pagespeed.ic.qJoR73K5hJ.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xave-maria-english-lead-sheet-page-1-fixed-again.png.pagespeed.ic.0vrUF9g0bC.webp b/Free Lead Sheets for All Instruments and Voices!_files/xave-maria-english-lead-sheet-page-1-fixed-again.png.pagespeed.ic.0vrUF9g0bC.webp deleted file mode 100644 index 58a3aa9..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xave-maria-english-lead-sheet-page-1-fixed-again.png.pagespeed.ic.0vrUF9g0bC.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xaway-in-a-manger-lead-sheet.png.pagespeed.ic.Bkp1ZRGTdB.webp b/Free Lead Sheets for All Instruments and Voices!_files/xaway-in-a-manger-lead-sheet.png.pagespeed.ic.Bkp1ZRGTdB.webp deleted file mode 100644 index f07b981..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xaway-in-a-manger-lead-sheet.png.pagespeed.ic.Bkp1ZRGTdB.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xbest-christmas-songs-ever-lead-sheets.jpg.pagespeed.ic.KMVHVg7Zqe.webp b/Free Lead Sheets for All Instruments and Voices!_files/xbest-christmas-songs-ever-lead-sheets.jpg.pagespeed.ic.KMVHVg7Zqe.webp deleted file mode 100644 index 6fe8d22..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xbest-christmas-songs-ever-lead-sheets.jpg.pagespeed.ic.KMVHVg7Zqe.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xblow-the-candles-out-lead-sheet-with-chords.gif.pagespeed.ic.xqCCObI4ke.webp b/Free Lead Sheets for All Instruments and Voices!_files/xblow-the-candles-out-lead-sheet-with-chords.gif.pagespeed.ic.xqCCObI4ke.webp deleted file mode 100644 index 71f8248..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xblow-the-candles-out-lead-sheet-with-chords.gif.pagespeed.ic.xqCCObI4ke.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xbonaparte-page-1-of-2.gif.pagespeed.ic.SDhcyV7GD9.webp b/Free Lead Sheets for All Instruments and Voices!_files/xbonaparte-page-1-of-2.gif.pagespeed.ic.SDhcyV7GD9.webp deleted file mode 100644 index 6012e57..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xbonaparte-page-1-of-2.gif.pagespeed.ic.SDhcyV7GD9.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xbutterfly.png.pagespeed.ic.u3sYGrxoyw.webp b/Free Lead Sheets for All Instruments and Voices!_files/xbutterfly.png.pagespeed.ic.u3sYGrxoyw.webp deleted file mode 100644 index 46e6487..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xbutterfly.png.pagespeed.ic.u3sYGrxoyw.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xcaisson-song.png.pagespeed.ic.-xbtr-tSs9.webp b/Free Lead Sheets for All Instruments and Voices!_files/xcaisson-song.png.pagespeed.ic.-xbtr-tSs9.webp deleted file mode 100644 index 7c319dc..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xcaisson-song.png.pagespeed.ic.-xbtr-tSs9.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xcamptown-races-lead-d.gif.pagespeed.ic.9Mh2Dl0m5Y.webp b/Free Lead Sheets for All Instruments and Voices!_files/xcamptown-races-lead-d.gif.pagespeed.ic.9Mh2Dl0m5Y.webp deleted file mode 100644 index 5f26750..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xcamptown-races-lead-d.gif.pagespeed.ic.9Mh2Dl0m5Y.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xcat-came-back-lead.gif.pagespeed.ic.hvkgiqc8HY.webp b/Free Lead Sheets for All Instruments and Voices!_files/xcat-came-back-lead.gif.pagespeed.ic.hvkgiqc8HY.webp deleted file mode 100644 index c79a253..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xcat-came-back-lead.gif.pagespeed.ic.hvkgiqc8HY.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xchopsticks-lead-short.gif.pagespeed.ic.OKsNOOfS_M.webp b/Free Lead Sheets for All Instruments and Voices!_files/xchopsticks-lead-short.gif.pagespeed.ic.OKsNOOfS_M.webp deleted file mode 100644 index f17db78..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xchopsticks-lead-short.gif.pagespeed.ic.OKsNOOfS_M.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xcolorado-trail-guitar.gif.pagespeed.ic.ih352nHQfJ.webp b/Free Lead Sheets for All Instruments and Voices!_files/xcolorado-trail-guitar.gif.pagespeed.ic.ih352nHQfJ.webp deleted file mode 100644 index 11102ab..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xcolorado-trail-guitar.gif.pagespeed.ic.ih352nHQfJ.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xdeck-the-halls-lead-sheet.png.pagespeed.ic.hDIM1j1QYU.webp b/Free Lead Sheets for All Instruments and Voices!_files/xdeck-the-halls-lead-sheet.png.pagespeed.ic.hDIM1j1QYU.webp deleted file mode 100644 index 33cdb2c..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xdeck-the-halls-lead-sheet.png.pagespeed.ic.hDIM1j1QYU.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xdona-nobis-vocal-a.gif.pagespeed.ic.8fLkXp6ARF.webp b/Free Lead Sheets for All Instruments and Voices!_files/xdona-nobis-vocal-a.gif.pagespeed.ic.8fLkXp6ARF.webp deleted file mode 100644 index 3cb0ec0..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xdona-nobis-vocal-a.gif.pagespeed.ic.8fLkXp6ARF.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xdown-in-the-valley-50-percent.gif.pagespeed.ic.OjbASpHfRW.webp b/Free Lead Sheets for All Instruments and Voices!_files/xdown-in-the-valley-50-percent.gif.pagespeed.ic.OjbASpHfRW.webp deleted file mode 100644 index a1ef88e..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xdown-in-the-valley-50-percent.gif.pagespeed.ic.OjbASpHfRW.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xdown-to-the-river-to-pray-lead-g-page-1.jpg.pagespeed.ic.WSBxhvZMcE.webp b/Free Lead Sheets for All Instruments and Voices!_files/xdown-to-the-river-to-pray-lead-g-page-1.jpg.pagespeed.ic.WSBxhvZMcE.webp deleted file mode 100644 index 5d5e6d0..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xdown-to-the-river-to-pray-lead-g-page-1.jpg.pagespeed.ic.WSBxhvZMcE.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xdoxology-lead-sheet.png.pagespeed.ic.tRAN_j1V5O.webp b/Free Lead Sheets for All Instruments and Voices!_files/xdoxology-lead-sheet.png.pagespeed.ic.tRAN_j1V5O.webp deleted file mode 100644 index 4b42ca0..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xdoxology-lead-sheet.png.pagespeed.ic.tRAN_j1V5O.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xearly-american-melodies-for-flute-and-guitar-2023.jpg.pagespeed.ic.q32eXVE4qK.webp b/Free Lead Sheets for All Instruments and Voices!_files/xearly-american-melodies-for-flute-and-guitar-2023.jpg.pagespeed.ic.q32eXVE4qK.webp deleted file mode 100644 index f4f4dd1..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xearly-american-melodies-for-flute-and-guitar-2023.jpg.pagespeed.ic.q32eXVE4qK.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xerie-canal-lead-sheet-page-1.gif.pagespeed.ic.1PjzJ8SY_m.webp b/Free Lead Sheets for All Instruments and Voices!_files/xerie-canal-lead-sheet-page-1.gif.pagespeed.ic.1PjzJ8SY_m.webp deleted file mode 100644 index 2937568..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xerie-canal-lead-sheet-page-1.gif.pagespeed.ic.1PjzJ8SY_m.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xesther-cover-with-black-border-thicker.jpg.pagespeed.ic.bRBvOs_sx7.webp b/Free Lead Sheets for All Instruments and Voices!_files/xesther-cover-with-black-border-thicker.jpg.pagespeed.ic.bRBvOs_sx7.webp deleted file mode 100644 index b99e8bb..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xesther-cover-with-black-border-thicker.jpg.pagespeed.ic.bRBvOs_sx7.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xfarther-on-melody-line-key-of-e.gif.pagespeed.ic.AnFHuUkHc4.webp b/Free Lead Sheets for All Instruments and Voices!_files/xfarther-on-melody-line-key-of-e.gif.pagespeed.ic.AnFHuUkHc4.webp deleted file mode 100644 index 678bd1a..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xfarther-on-melody-line-key-of-e.gif.pagespeed.ic.AnFHuUkHc4.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xfound-a-peanut-guitar-c.gif.pagespeed.ic.56sHMdJdu5.webp b/Free Lead Sheets for All Instruments and Voices!_files/xfound-a-peanut-guitar-c.gif.pagespeed.ic.56sHMdJdu5.webp deleted file mode 100644 index 004f22d..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xfound-a-peanut-guitar-c.gif.pagespeed.ic.56sHMdJdu5.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xgod-is-so-good-lead.gif.pagespeed.ic.2oyAx2gkVS.webp b/Free Lead Sheets for All Instruments and Voices!_files/xgod-is-so-good-lead.gif.pagespeed.ic.2oyAx2gkVS.webp deleted file mode 100644 index 4b29336..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xgod-is-so-good-lead.gif.pagespeed.ic.2oyAx2gkVS.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xgod-rest-you-lead-sheet.gif.pagespeed.ic.l6AoGu2ydL.webp b/Free Lead Sheets for All Instruments and Voices!_files/xgod-rest-you-lead-sheet.gif.pagespeed.ic.l6AoGu2ydL.webp deleted file mode 100644 index a6f6990..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xgod-rest-you-lead-sheet.gif.pagespeed.ic.l6AoGu2ydL.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xgoober-peas-guitar-page-1-gif.png.pagespeed.ic.ET89gHwtmd.webp b/Free Lead Sheets for All Instruments and Voices!_files/xgoober-peas-guitar-page-1-gif.png.pagespeed.ic.ET89gHwtmd.webp deleted file mode 100644 index d1e0fbd..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xgoober-peas-guitar-page-1-gif.png.pagespeed.ic.ET89gHwtmd.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xgreensleeves-guitar-am-page-1.gif.pagespeed.ic.kK8gXoMCZF.webp b/Free Lead Sheets for All Instruments and Voices!_files/xgreensleeves-guitar-am-page-1.gif.pagespeed.ic.kK8gXoMCZF.webp deleted file mode 100644 index 3917979..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xgreensleeves-guitar-am-page-1.gif.pagespeed.ic.kK8gXoMCZF.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xgrenadier-in-am-for-guitar.gif.pagespeed.ic.xPj_Fc46Xo.webp b/Free Lead Sheets for All Instruments and Voices!_files/xgrenadier-in-am-for-guitar.gif.pagespeed.ic.xPj_Fc46Xo.webp deleted file mode 100644 index 4ef5a2e..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xgrenadier-in-am-for-guitar.gif.pagespeed.ic.xPj_Fc46Xo.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xhappy-birthday-lead-sheet.gif.pagespeed.ic.8H7l6D0e6b.webp b/Free Lead Sheets for All Instruments and Voices!_files/xhappy-birthday-lead-sheet.gif.pagespeed.ic.8H7l6D0e6b.webp deleted file mode 100644 index feb133e..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xhappy-birthday-lead-sheet.gif.pagespeed.ic.8H7l6D0e6b.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xheigh-ho-voice-dm-fixed.gif.pagespeed.ic.II4SU87Yeo.webp b/Free Lead Sheets for All Instruments and Voices!_files/xheigh-ho-voice-dm-fixed.gif.pagespeed.ic.II4SU87Yeo.webp deleted file mode 100644 index ef6acf4..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xheigh-ho-voice-dm-fixed.gif.pagespeed.ic.II4SU87Yeo.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xi-dreamt-that-i-dwelt-lead-sheet-page-1.png.pagespeed.ic.saKRhEPcZ-.webp b/Free Lead Sheets for All Instruments and Voices!_files/xi-dreamt-that-i-dwelt-lead-sheet-page-1.png.pagespeed.ic.saKRhEPcZ-.webp deleted file mode 100644 index b37de7c..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xi-dreamt-that-i-dwelt-lead-sheet-page-1.png.pagespeed.ic.saKRhEPcZ-.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xi-love-the-mountains-guitar-in-g.gif.pagespeed.ic.3ewIxrFEK_.webp b/Free Lead Sheets for All Instruments and Voices!_files/xi-love-the-mountains-guitar-in-g.gif.pagespeed.ic.3ewIxrFEK_.webp deleted file mode 100644 index d0a0bb7..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xi-love-the-mountains-guitar-in-g.gif.pagespeed.ic.3ewIxrFEK_.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xill-fly-away-smp-guitar-g-page-1.jpg.pagespeed.ic.QCjEmAVAAW.webp b/Free Lead Sheets for All Instruments and Voices!_files/xill-fly-away-smp-guitar-g-page-1.jpg.pagespeed.ic.QCjEmAVAAW.webp deleted file mode 100644 index 277908d..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xill-fly-away-smp-guitar-g-page-1.jpg.pagespeed.ic.QCjEmAVAAW.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xirish-wedding-short-dm-lead-updated-2020.gif.pagespeed.ic.-w15Wx8j-g.webp b/Free Lead Sheets for All Instruments and Voices!_files/xirish-wedding-short-dm-lead-updated-2020.gif.pagespeed.ic.-w15Wx8j-g.webp deleted file mode 100644 index 5b773fd..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xirish-wedding-short-dm-lead-updated-2020.gif.pagespeed.ic.-w15Wx8j-g.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xjingle-bells-c-guitar.gif.pagespeed.ic.AvPlsXQKHU.webp b/Free Lead Sheets for All Instruments and Voices!_files/xjingle-bells-c-guitar.gif.pagespeed.ic.AvPlsXQKHU.webp deleted file mode 100644 index b62d35c..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xjingle-bells-c-guitar.gif.pagespeed.ic.AvPlsXQKHU.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xjoy-to-the-world-guitar-tabs-page-1.jpg.pagespeed.ic.pR_mLq-DKM.webp b/Free Lead Sheets for All Instruments and Voices!_files/xjoy-to-the-world-guitar-tabs-page-1.jpg.pagespeed.ic.pR_mLq-DKM.webp deleted file mode 100644 index 25bc915..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xjoy-to-the-world-guitar-tabs-page-1.jpg.pagespeed.ic.pR_mLq-DKM.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xjune-apple-fixed.png.pagespeed.ic.M7NvwEA_1p.webp b/Free Lead Sheets for All Instruments and Voices!_files/xjune-apple-fixed.png.pagespeed.ic.M7NvwEA_1p.webp deleted file mode 100644 index 6324b8a..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xjune-apple-fixed.png.pagespeed.ic.M7NvwEA_1p.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xjust-the-black-keys-cover-jpg-for-website.jpg.pagespeed.ic.vEfO83DLo3.webp b/Free Lead Sheets for All Instruments and Voices!_files/xjust-the-black-keys-cover-jpg-for-website.jpg.pagespeed.ic.vEfO83DLo3.webp deleted file mode 100644 index 1e22c33..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xjust-the-black-keys-cover-jpg-for-website.jpg.pagespeed.ic.vEfO83DLo3.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xkeegans-waltz-lead-page-1.gif.pagespeed.ic.oWAKxWTzqn.webp b/Free Lead Sheets for All Instruments and Voices!_files/xkeegans-waltz-lead-page-1.gif.pagespeed.ic.oWAKxWTzqn.webp deleted file mode 100644 index e768b8c..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xkeegans-waltz-lead-page-1.gif.pagespeed.ic.oWAKxWTzqn.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xkum-ba-yah-lead-sheet.gif.pagespeed.ic.KcsvYqGWl3.webp b/Free Lead Sheets for All Instruments and Voices!_files/xkum-ba-yah-lead-sheet.gif.pagespeed.ic.KcsvYqGWl3.webp deleted file mode 100644 index 9aecd3f..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xkum-ba-yah-lead-sheet.gif.pagespeed.ic.KcsvYqGWl3.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xlavenders-blue-lead.gif.pagespeed.ic.36M1UbHUWM.webp b/Free Lead Sheets for All Instruments and Voices!_files/xlavenders-blue-lead.gif.pagespeed.ic.36M1UbHUWM.webp deleted file mode 100644 index 4d30f09..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xlavenders-blue-lead.gif.pagespeed.ic.36M1UbHUWM.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xloch-lomond-guitar-page-1.gif.pagespeed.ic.Qfhv6OSMAc.webp b/Free Lead Sheets for All Instruments and Voices!_files/xloch-lomond-guitar-page-1.gif.pagespeed.ic.Qfhv6OSMAc.webp deleted file mode 100644 index d2468ea..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xloch-lomond-guitar-page-1.gif.pagespeed.ic.Qfhv6OSMAc.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xmarines-hymn.png.pagespeed.ic.51pYIQVxT3.webp b/Free Lead Sheets for All Instruments and Voices!_files/xmarines-hymn.png.pagespeed.ic.51pYIQVxT3.webp deleted file mode 100644 index 8aea6c6..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xmarines-hymn.png.pagespeed.ic.51pYIQVxT3.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xmaris-wedding-eighth-notes.png.pagespeed.ic.Bk_igvcI-y.webp b/Free Lead Sheets for All Instruments and Voices!_files/xmaris-wedding-eighth-notes.png.pagespeed.ic.Bk_igvcI-y.webp deleted file mode 100644 index 2ebcf46..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xmaris-wedding-eighth-notes.png.pagespeed.ic.Bk_igvcI-y.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-guitar-in-a.gif.pagespeed.ic.AvR1CoZ5Pw.webp b/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-guitar-in-a.gif.pagespeed.ic.AvR1CoZ5Pw.webp deleted file mode 100644 index 4dbe116..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-guitar-in-a.gif.pagespeed.ic.AvR1CoZ5Pw.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-sampler-single-bass-notes.jpg.pagespeed.ic.Y_HIg4Kg7R.webp b/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-sampler-single-bass-notes.jpg.pagespeed.ic.Y_HIg4Kg7R.webp deleted file mode 100644 index 7ccf593..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-sampler-single-bass-notes.jpg.pagespeed.ic.Y_HIg4Kg7R.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-with-chord-symbols-fixed.png.pagespeed.ic.KZYyeS_XmO.webp b/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-with-chord-symbols-fixed.png.pagespeed.ic.KZYyeS_XmO.webp deleted file mode 100644 index 01a8ff4..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xmary-had-a-little-lamb-with-chord-symbols-fixed.png.pagespeed.ic.KZYyeS_XmO.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xminstrel-boy-lead-sheet-c.png.pagespeed.ic.uJQ1rj-9wF.webp b/Free Lead Sheets for All Instruments and Voices!_files/xminstrel-boy-lead-sheet-c.png.pagespeed.ic.uJQ1rj-9wF.webp deleted file mode 100644 index a0a9da3..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xminstrel-boy-lead-sheet-c.png.pagespeed.ic.uJQ1rj-9wF.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xmodern-major-general-page-1.png.pagespeed.ic.jWlleGzGyV.webp b/Free Lead Sheets for All Instruments and Voices!_files/xmodern-major-general-page-1.png.pagespeed.ic.jWlleGzGyV.webp deleted file mode 100644 index e26b951..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xmodern-major-general-page-1.png.pagespeed.ic.jWlleGzGyV.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xo-come-o-come-emmanuel-lead-sheet.gif.pagespeed.ic.ljn7f5fkLP.webp b/Free Lead Sheets for All Instruments and Voices!_files/xo-come-o-come-emmanuel-lead-sheet.gif.pagespeed.ic.ljn7f5fkLP.webp deleted file mode 100644 index 40401fb..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xo-come-o-come-emmanuel-lead-sheet.gif.pagespeed.ic.ljn7f5fkLP.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xo-holy-night-lead-sheet-new-page-1.gif.pagespeed.ic.UQZyUyWHcn.webp b/Free Lead Sheets for All Instruments and Voices!_files/xo-holy-night-lead-sheet-new-page-1.gif.pagespeed.ic.UQZyUyWHcn.webp deleted file mode 100644 index 75860b6..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xo-holy-night-lead-sheet-new-page-1.gif.pagespeed.ic.UQZyUyWHcn.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xo-susannah-guitar-page-1.gif.pagespeed.ic.PZvM02X5mR.webp b/Free Lead Sheets for All Instruments and Voices!_files/xo-susannah-guitar-page-1.gif.pagespeed.ic.PZvM02X5mR.webp deleted file mode 100644 index fd9b2f0..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xo-susannah-guitar-page-1.gif.pagespeed.ic.PZvM02X5mR.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xoh-how-lovely-round-d.jpg.pagespeed.ic.86-_AouV4j.webp b/Free Lead Sheets for All Instruments and Voices!_files/xoh-how-lovely-round-d.jpg.pagespeed.ic.86-_AouV4j.webp deleted file mode 100644 index 08391c2..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xoh-how-lovely-round-d.jpg.pagespeed.ic.86-_AouV4j.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xon-top-of-old-smokey-guitar.png.pagespeed.ic.yGEot8iB8H.webp b/Free Lead Sheets for All Instruments and Voices!_files/xon-top-of-old-smokey-guitar.png.pagespeed.ic.yGEot8iB8H.webp deleted file mode 100644 index 6780dd7..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xon-top-of-old-smokey-guitar.png.pagespeed.ic.yGEot8iB8H.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xred-haired-boy-in-g1-fixed-gif.gif.pagespeed.ic.5C7P0AcnpK.webp b/Free Lead Sheets for All Instruments and Voices!_files/xred-haired-boy-in-g1-fixed-gif.gif.pagespeed.ic.5C7P0AcnpK.webp deleted file mode 100644 index 118cf9a..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xred-haired-boy-in-g1-fixed-gif.gif.pagespeed.ic.5C7P0AcnpK.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xriddle-song-lead-with-blank-bass-staff-f.jpg.pagespeed.ic.U7dpaFUWKc.webp b/Free Lead Sheets for All Instruments and Voices!_files/xriddle-song-lead-with-blank-bass-staff-f.jpg.pagespeed.ic.U7dpaFUWKc.webp deleted file mode 100644 index 7844023..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xriddle-song-lead-with-blank-bass-staff-f.jpg.pagespeed.ic.U7dpaFUWKc.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xriddle-song-lead-with-blank-bass-staff-g.jpg.pagespeed.ic.PIbCeg0xnL.webp b/Free Lead Sheets for All Instruments and Voices!_files/xriddle-song-lead-with-blank-bass-staff-g.jpg.pagespeed.ic.PIbCeg0xnL.webp deleted file mode 100644 index 24bf0bc..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xriddle-song-lead-with-blank-bass-staff-g.jpg.pagespeed.ic.PIbCeg0xnL.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xroad-to-lisdoonvarna-plain.gif.pagespeed.ic.QTMKG5y7Vz.webp b/Free Lead Sheets for All Instruments and Voices!_files/xroad-to-lisdoonvarna-plain.gif.pagespeed.ic.QTMKG5y7Vz.webp deleted file mode 100644 index d437030..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xroad-to-lisdoonvarna-plain.gif.pagespeed.ic.QTMKG5y7Vz.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xscarborough-fair-lead.gif.pagespeed.ic.fZGx-ym96p.webp b/Free Lead Sheets for All Instruments and Voices!_files/xscarborough-fair-lead.gif.pagespeed.ic.fZGx-ym96p.webp deleted file mode 100644 index a8985b4..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xscarborough-fair-lead.gif.pagespeed.ic.fZGx-ym96p.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xshenandoah-guitar-tabs.png.pagespeed.ic.9uSn09ka9a.webp b/Free Lead Sheets for All Instruments and Voices!_files/xshenandoah-guitar-tabs.png.pagespeed.ic.9uSn09ka9a.webp deleted file mode 100644 index d171cda..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xshenandoah-guitar-tabs.png.pagespeed.ic.9uSn09ka9a.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xshortnin-bread.png.pagespeed.ic.QY2ASWbCF5.webp b/Free Lead Sheets for All Instruments and Voices!_files/xshortnin-bread.png.pagespeed.ic.QY2ASWbCF5.webp deleted file mode 100644 index e9cafdd..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xshortnin-bread.png.pagespeed.ic.QY2ASWbCF5.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xsilent-night-lead-sheet.gif.pagespeed.ic.hBorfZ-axk.webp b/Free Lead Sheets for All Instruments and Voices!_files/xsilent-night-lead-sheet.gif.pagespeed.ic.hBorfZ-axk.webp deleted file mode 100644 index 71b4f56..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xsilent-night-lead-sheet.gif.pagespeed.ic.hBorfZ-axk.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xsing-the-bible-story-logo.png.pagespeed.ic.Z0qJR6M3Qk.webp b/Free Lead Sheets for All Instruments and Voices!_files/xsing-the-bible-story-logo.png.pagespeed.ic.Z0qJR6M3Qk.webp deleted file mode 100644 index bc3a13f..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xsing-the-bible-story-logo.png.pagespeed.ic.Z0qJR6M3Qk.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xsing-we-noel-lead-sheet.png.pagespeed.ic.vjbjarrkZf.webp b/Free Lead Sheets for All Instruments and Voices!_files/xsing-we-noel-lead-sheet.png.pagespeed.ic.vjbjarrkZf.webp deleted file mode 100644 index 6f811d2..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xsing-we-noel-lead-sheet.png.pagespeed.ic.vjbjarrkZf.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xskye-boat-song.png.pagespeed.ic.7gAKUiFxBS.webp b/Free Lead Sheets for All Instruments and Voices!_files/xskye-boat-song.png.pagespeed.ic.7gAKUiFxBS.webp deleted file mode 100644 index 2b0c652..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xskye-boat-song.png.pagespeed.ic.7gAKUiFxBS.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xsleepsong-lead-dm-page-1-top.jpg.pagespeed.ic.bHzlxwSVsQ.webp b/Free Lead Sheets for All Instruments and Voices!_files/xsleepsong-lead-dm-page-1-top.jpg.pagespeed.ic.bHzlxwSVsQ.webp deleted file mode 100644 index 98c839c..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xsleepsong-lead-dm-page-1-top.jpg.pagespeed.ic.bHzlxwSVsQ.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xslumber-my-darling-lead-sheet.png.pagespeed.ic.gFg9m95fhe.webp b/Free Lead Sheets for All Instruments and Voices!_files/xslumber-my-darling-lead-sheet.png.pagespeed.ic.gFg9m95fhe.webp deleted file mode 100644 index e724e98..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xslumber-my-darling-lead-sheet.png.pagespeed.ic.gFg9m95fhe.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xsongs-old-and-songs-new-cover-picture-with-border.png.pagespeed.ic.UCLvdcWRah.webp b/Free Lead Sheets for All Instruments and Voices!_files/xsongs-old-and-songs-new-cover-picture-with-border.png.pagespeed.ic.UCLvdcWRah.webp deleted file mode 100644 index 3e95c79..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xsongs-old-and-songs-new-cover-picture-with-border.png.pagespeed.ic.UCLvdcWRah.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xspanish-ladies-guitar-page-1.gif.pagespeed.ic.Fh_WAXzsrf.webp b/Free Lead Sheets for All Instruments and Voices!_files/xspanish-ladies-guitar-page-1.gif.pagespeed.ic.Fh_WAXzsrf.webp deleted file mode 100644 index 6c17f43..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xspanish-ladies-guitar-page-1.gif.pagespeed.ic.Fh_WAXzsrf.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xspanish-lady-lead-sheet-fixed.gif.pagespeed.ic.cmpgIr7Sjx.webp b/Free Lead Sheets for All Instruments and Voices!_files/xspanish-lady-lead-sheet-fixed.gif.pagespeed.ic.cmpgIr7Sjx.webp deleted file mode 100644 index 57b6d58..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xspanish-lady-lead-sheet-fixed.gif.pagespeed.ic.cmpgIr7Sjx.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xstar-of-the-county-down-eighth-notes-empty-bass-staff.gif.pagespeed.ic.jxVJe2jT8Q.webp b/Free Lead Sheets for All Instruments and Voices!_files/xstar-of-the-county-down-eighth-notes-empty-bass-staff.gif.pagespeed.ic.jxVJe2jT8Q.webp deleted file mode 100644 index f8b1608..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xstar-of-the-county-down-eighth-notes-empty-bass-staff.gif.pagespeed.ic.jxVJe2jT8Q.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xstar-spangled-banner-lead-sheet.gif.pagespeed.ic.eBqqZWP3F9.webp b/Free Lead Sheets for All Instruments and Voices!_files/xstar-spangled-banner-lead-sheet.gif.pagespeed.ic.eBqqZWP3F9.webp deleted file mode 100644 index 1d53d67..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xstar-spangled-banner-lead-sheet.gif.pagespeed.ic.eBqqZWP3F9.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xstreets-of-laredo.gif.pagespeed.ic.CuIGezgOzd.webp b/Free Lead Sheets for All Instruments and Voices!_files/xstreets-of-laredo.gif.pagespeed.ic.CuIGezgOzd.webp deleted file mode 100644 index ae987f8..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xstreets-of-laredo.gif.pagespeed.ic.CuIGezgOzd.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xsweet-betsy-from-pike.png.pagespeed.ic.aV4l0i3Y2J.webp b/Free Lead Sheets for All Instruments and Voices!_files/xsweet-betsy-from-pike.png.pagespeed.ic.aV4l0i3Y2J.webp deleted file mode 100644 index 6e1b970..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xsweet-betsy-from-pike.png.pagespeed.ic.aV4l0i3Y2J.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xtaps-lead-sheet.gif.pagespeed.ic.g3lFl93GpW.webp b/Free Lead Sheets for All Instruments and Voices!_files/xtaps-lead-sheet.gif.pagespeed.ic.g3lFl93GpW.webp deleted file mode 100644 index 633feca..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xtaps-lead-sheet.gif.pagespeed.ic.g3lFl93GpW.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xten-penny-bit.gif.pagespeed.ic.-7ofGHUdbl.webp b/Free Lead Sheets for All Instruments and Voices!_files/xten-penny-bit.gif.pagespeed.ic.-7ofGHUdbl.webp deleted file mode 100644 index 5aff6a5..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xten-penny-bit.gif.pagespeed.ic.-7ofGHUdbl.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xtwinkle-guitar.gif.pagespeed.ic.S78ENlU8g0.webp b/Free Lead Sheets for All Instruments and Voices!_files/xtwinkle-guitar.gif.pagespeed.ic.S78ENlU8g0.webp deleted file mode 100644 index 5789bca..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xtwinkle-guitar.gif.pagespeed.ic.S78ENlU8g0.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xuna-furtiva-lagrima-lead-sheet-page-1-fixed.png.pagespeed.ic.s7d68wGk_e.webp b/Free Lead Sheets for All Instruments and Voices!_files/xuna-furtiva-lagrima-lead-sheet-page-1-fixed.png.pagespeed.ic.s7d68wGk_e.webp deleted file mode 100644 index bef3e5a..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xuna-furtiva-lagrima-lead-sheet-page-1-fixed.png.pagespeed.ic.s7d68wGk_e.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xup-on-the-house-top-lead-sheet.jpg.pagespeed.ic.NtV2OHXDyk.webp b/Free Lead Sheets for All Instruments and Voices!_files/xup-on-the-house-top-lead-sheet.jpg.pagespeed.ic.NtV2OHXDyk.webp deleted file mode 100644 index de52ec1..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xup-on-the-house-top-lead-sheet.jpg.pagespeed.ic.NtV2OHXDyk.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xvieni-vieni-lead-sheet.gif.pagespeed.ic.LDAHmeaXxR.webp b/Free Lead Sheets for All Instruments and Voices!_files/xvieni-vieni-lead-sheet.gif.pagespeed.ic.LDAHmeaXxR.webp deleted file mode 100644 index bed2ec0..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xvieni-vieni-lead-sheet.gif.pagespeed.ic.LDAHmeaXxR.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xwabash-cannonball-guitar.gif.pagespeed.ic.h8dBimnTo3.webp b/Free Lead Sheets for All Instruments and Voices!_files/xwabash-cannonball-guitar.gif.pagespeed.ic.h8dBimnTo3.webp deleted file mode 100644 index 692f308..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xwabash-cannonball-guitar.gif.pagespeed.ic.h8dBimnTo3.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xwaltzing-matilda-lead-sheet-d.gif.pagespeed.ic.wu7ZFliRcq.webp b/Free Lead Sheets for All Instruments and Voices!_files/xwaltzing-matilda-lead-sheet-d.gif.pagespeed.ic.wu7ZFliRcq.webp deleted file mode 100644 index 55e0668..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xwaltzing-matilda-lead-sheet-d.gif.pagespeed.ic.wu7ZFliRcq.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xwe-wish-you-a-merry-christmas-lead-sheet.gif.pagespeed.ic.VyJZoBmpUz.webp b/Free Lead Sheets for All Instruments and Voices!_files/xwe-wish-you-a-merry-christmas-lead-sheet.gif.pagespeed.ic.VyJZoBmpUz.webp deleted file mode 100644 index e17182c..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xwe-wish-you-a-merry-christmas-lead-sheet.gif.pagespeed.ic.VyJZoBmpUz.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xwellerrman-lead-dm-page-1.jpg.pagespeed.ic.TyEAL8bckQ.webp b/Free Lead Sheets for All Instruments and Voices!_files/xwellerrman-lead-dm-page-1.jpg.pagespeed.ic.TyEAL8bckQ.webp deleted file mode 100644 index 48a2af3..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xwellerrman-lead-dm-page-1.jpg.pagespeed.ic.TyEAL8bckQ.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xwhat-do-you-do-with-a-drunken-sailor-guitar-short.gif.pagespeed.ic.AaprtBVghg.webp b/Free Lead Sheets for All Instruments and Voices!_files/xwhat-do-you-do-with-a-drunken-sailor-guitar-short.gif.pagespeed.ic.AaprtBVghg.webp deleted file mode 100644 index 2b83d5d..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xwhat-do-you-do-with-a-drunken-sailor-guitar-short.gif.pagespeed.ic.AaprtBVghg.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xwhen-the-saints-lead.gif.pagespeed.ic.1pjMWB5859.webp b/Free Lead Sheets for All Instruments and Voices!_files/xwhen-the-saints-lead.gif.pagespeed.ic.1pjMWB5859.webp deleted file mode 100644 index d1dab73..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xwhen-the-saints-lead.gif.pagespeed.ic.1pjMWB5859.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xwhite-orange-and-green-lead-sheet.png.pagespeed.ic.J_8Yo2L7xY.webp b/Free Lead Sheets for All Instruments and Voices!_files/xwhite-orange-and-green-lead-sheet.png.pagespeed.ic.J_8Yo2L7xY.webp deleted file mode 100644 index 12b9de7..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xwhite-orange-and-green-lead-sheet.png.pagespeed.ic.J_8Yo2L7xY.webp and /dev/null differ diff --git a/Free Lead Sheets for All Instruments and Voices!_files/xwild-mountain-thyme-guitar-page-1.jpg.pagespeed.ic.o2EsPNAsP9.webp b/Free Lead Sheets for All Instruments and Voices!_files/xwild-mountain-thyme-guitar-page-1.jpg.pagespeed.ic.o2EsPNAsP9.webp deleted file mode 100644 index dbc8930..0000000 Binary files a/Free Lead Sheets for All Instruments and Voices!_files/xwild-mountain-thyme-guitar-page-1.jpg.pagespeed.ic.o2EsPNAsP9.webp and /dev/null differ diff --git a/O Fortuna.pdf b/O Fortuna.pdf deleted file mode 100644 index 9cb9885..0000000 Binary files a/O Fortuna.pdf and /dev/null differ diff --git a/README.md b/README.md index a8403ae..38443a0 100644 --- a/README.md +++ b/README.md @@ -14,16 +14,20 @@ Works with **keyboard**, **Wii Rock Band drums**, **Xbox/PS Rock Band drums**, * - **F** = Red (Tom) - **G** = Yellow (Snare) - **H** = Blue (Hi-hat) - - **J** = Green (Tom) + - **J** = Green (Tom 2) - **Space** = Kick (Bass drum) + - **D** = Crash (off by default) + - **K** = Ride (off by default) + - **L** = Tom 3 (off by default) - **Escape** = Pause 6. **Right-click** any genre tab or song to hide it ## Features -- **16 Genres** across two modes: synth orchestra songs + drum beat patterns -- **91 synth pieces** with full synthesized orchestra background (68 minutes) +- **18 Genres** across two modes: synth orchestra songs + drum beat patterns +- **124 synth pieces** with full synthesized orchestra background - **120 drum patterns** across 8 genres +- **Note density toggle** — switch between Full and Simple (fewer notes for beginners) - **Drums or Orchestra mode** — choose whether pad hits play drum sounds or the actual melody note - **Speed control** — slow down to 50% for practice or speed up to 150% - **Volume control** — adjustable master volume @@ -31,7 +35,7 @@ Works with **keyboard**, **Wii Rock Band drums**, **Xbox/PS Rock Band drums**, * - **Gamepad Remap** — configure any USB drum kit with the Remap Pads button - **Hide genres/songs** — right-click to hide, "Show All" to restore, saved across sessions - **Multiplayer** — take turns, scores compared at the end -- **Pad Toggles** — turn pads on/off to adjust difficulty +- **8 lanes** — 5 default pads + 3 extra (Crash, Ride, Tom 3) toggled on via Active Pads - **Preview** — hear any song before playing - **Leaderboard** — scores saved locally - **Settings persistence** — speed, volume, gamepad mapping, hidden items all saved to localStorage @@ -39,6 +43,23 @@ Works with **keyboard**, **Wii Rock Band drums**, **Xbox/PS Rock Band drums**, * ## Song List +### Nursery Rhymes (15 songs) +- Twinkle Twinkle Little Star (Traditional, 1760s) +- Mary Had a Little Lamb (S.J. Hale, 1830) +- Happy Birthday (P.S. Hill, 1893) +- Hot Cross Buns (English, 1798) +- London Bridge Is Falling Down (English, 1744) +- Old MacDonald Had a Farm (English, 1706) +- Row Row Row Your Boat (English, 1852) +- Three Blind Mice (English, 1609) +- Itsy Bitsy Spider (English, 1910s) +- Pop Goes the Weasel (English, 1850s) +- Chopsticks (Euphemia Allen, 1877) +- Lavender's Blue (English Traditional, 1670s) +- Shortnin' Bread (Traditional, 1900s) +- Jack and Jill (English, 1765) +- Humpty Dumpty (English, 1797) + ### Singalong (20 songs) - Drunken Sailor (Sea Shanty) - Wellerman (NZ Sea Shanty, 1860s) @@ -61,7 +82,7 @@ Works with **keyboard**, **Wii Rock Band drums**, **Xbox/PS Rock Band drums**, * - Scarborough Fair (English Medieval) - My Bonnie Lies Over the Ocean (Scottish, 1881) -### Christmas (10 songs) +### Christmas (20 songs) - Jingle Bells (1857) - Silent Night (1818) - Deck the Halls (1862) @@ -72,6 +93,16 @@ Works with **keyboard**, **Wii Rock Band drums**, **Xbox/PS Rock Band drums**, * - Away in a Manger (1885) - 12 Days of Christmas (1780) - Hark the Herald Angels Sing (1840) +- O Come All Ye Faithful (J.F. Wade, 1743) +- God Rest Ye Merry Gentlemen (English, 1500s) +- What Child Is This (English, 1865) +- Angels We Have Heard on High (French, 1862) +- O Holy Night (A. Adam, 1847) +- Rudolph the Red-Nosed Reindeer (J. Marks, 1949) +- Frosty the Snowman (S. Nelson, 1950) +- Winter Wonderland (F. Bernard, 1934) +- Good King Wenceslas (Finnish, 1582) +- We Three Kings (J.H. Hopkins Jr., 1857) ### Folk (8 songs) - Oh! Susanna (Stephen Foster, 1848) @@ -103,6 +134,16 @@ Works with **keyboard**, **Wii Rock Band drums**, **Xbox/PS Rock Band drums**, * - Take Me Out to the Ball Game (American, 1908) - She'll Be Coming Round the Mountain (American, 1890s) +### Ragtime (8 pieces) +- The Entertainer (Scott Joplin, 1902) +- Maple Leaf Rag (Scott Joplin, 1899) +- The Easy Winners (Scott Joplin, 1901) +- Elite Syncopations (Scott Joplin, 1902) +- Solace (Scott Joplin, 1909) +- Peacherine Rag (Scott Joplin, 1901) +- The Cascades (Scott Joplin, 1904) +- Pineapple Rag (Scott Joplin, 1908) + ### Classical (26 pieces) - Beethoven's 5th (Opening) - Hall of the Mountain King (Grieg) @@ -193,6 +234,8 @@ All sounds are generated in real-time using the Web Audio API — no audio files | Snare | Highpass noise burst + 180Hz tone | | Hi-hat | Highpass noise burst, very short | | Toms | Sine oscillator pitch sweep | +| Crash | Long noise burst, wide frequency | +| Ride | Metallic ping, bandpass filtered | | Strings | Sawtooth + lowpass filter | | Brass | Square + lowpass filter | | Woodwind | Triangle oscillator | @@ -204,7 +247,7 @@ All sounds are generated in real-time using the Web Audio API — no audio files ## Tech - Pure vanilla JavaScript — no libraries, no build step, no server -- Single `index.html` file (~3000 lines) +- Single `index.html` file (~4850 lines) - Web Audio API for all sound synthesis - Canvas 2D for the note highway - Gamepad API for drum kit input @@ -214,3 +257,7 @@ All sounds are generated in real-time using the Web Audio API — no audio files ## License [MIT](LICENSE) + +## Disclaimer + +Rock Band is a trademark of Harmonix Music Systems. Guitar Hero is a trademark of Activision Publishing. Wii is a trademark of Nintendo. Xbox is a trademark of Microsoft. PlayStation is a trademark of Sony Interactive Entertainment. This project is not affiliated with, endorsed by, or connected to any of these companies. All trademarks are the property of their respective owners and are used here solely for hardware compatibility reference. diff --git a/index.html b/index.html index ca1e0a0..daa0157 100644 --- a/index.html +++ b/index.html @@ -55,10 +55,10 @@ canvas{display:block;} #pause-overlay{display:none;position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.8);z-index:20;flex-direction:column;align-items:center;justify-content:center;gap:16px;} #pause-overlay.show{display:flex;} #pause-overlay h2{font-size:28px;color:#fff;} -#remap-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.9);z-index:30;flex-direction:column;align-items:center;justify-content:center;gap:16px;} -#remap-overlay.show{display:flex;} -#remap-prompt{font-size:20px;font-weight:bold;text-align:center;} -#remap-status{font-size:13px;opacity:.5;text-align:center;} +#remap-overlay,#keyremap-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.9);z-index:30;flex-direction:column;align-items:center;justify-content:center;gap:16px;} +#remap-overlay.show,#keyremap-overlay.show{display:flex;} +#remap-prompt,#keyremap-prompt{font-size:20px;font-weight:bold;text-align:center;} +#remap-status,#keyremap-status{font-size:13px;opacity:.5;text-align:center;} @@ -98,6 +98,12 @@ canvas{display:block;}

Active Pads

Toggle which pads show notes. Inactive pads still make sound when hit.

+
+ Note density: + + + Fewer notes for beginners +
- +
+ +
@@ -227,10 +236,15 @@ const LANES=[ {label:"Blue", color:"#3182ce",key:"h", type:"hihat"}, {label:"Green", color:"#38a169",key:"j", type:"tom2"}, {label:"Kick", color:"#805ad5",key:" ", type:"kick"}, + {label:"Crash", color:"#ed8936",key:"d", type:"crash"}, + {label:"Ride", color:"#4fd1c5",key:"k", type:"ride"}, + {label:"Tom 3", color:"#d53f8c",key:"l", type:"tom3"}, ]; // which pads are active (show notes) — all on by default -let activePads=[true,true,true,true,true]; +let activePads=[true,true,true,true,true,false,false,false]; +// Simple mode — thins out notes, keeping only strong beats +let simpleMode=false; // ── RHYTHMS ─────────────────────────────────────────── // Every pattern now uses ALL 5 lanes (0=Red/tom, 1=Yellow/snare, 2=Blue/hihat, 3=Green/tom2, 4=Kick) @@ -624,7 +638,7 @@ const GENRES={ }; // ── CLASSICAL MODE ──────────────────────────────────── -const NT={C3:130.81,D3:146.83,Eb3:155.56,E3:164.81,F3:174.61,G3:196.00,Ab3:207.65,A3:220.00,Bb3:233.08,B3:246.94,C4:261.63,D4:293.66,Eb4:311.13,E4:329.63,F4:349.23,G4:392.00,Ab4:415.30,A4:440.00,Bb4:466.16,B4:493.88,C5:523.25,D5:587.33,Eb5:622.25,E5:659.25,F5:698.46,G5:783.99,A5:880.00,Gb3:185.00,Db4:277.18,Gb4:369.99,Db5:554.37,C6:1046.50}; +const NT={C3:130.81,D3:146.83,Eb3:155.56,E3:164.81,F3:174.61,G3:196.00,Ab3:207.65,A3:220.00,Bb3:233.08,B3:246.94,C4:261.63,D4:293.66,Eb4:311.13,E4:329.63,F4:349.23,G4:392.00,Ab4:415.30,A4:440.00,Bb4:466.16,B4:493.88,C5:523.25,D5:587.33,Eb5:622.25,E5:659.25,F5:698.46,G5:783.99,A5:880.00,Ab5:830.61,Gb3:185.00,Db4:277.18,Gb4:369.99,Db5:554.37,C6:1046.50}; function playSynth(ac,freq,t,dur,inst,vol,arr){ if(t0)brs(t,n[0],n[1]*0.9,vl*0.5); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + } + + // === SECTION 4 (32-44s): Theme returns with full orchestra === + for(var rep2=0;rep2<3;rep2++){ + var v2=0.45+rep2*0.08; + gallop1.forEach(function(n){ + tutti(t,n[0],n[1]*0.85,v2); + if(rep2>0)bg.push({t:t,f:n[0],d:n[1]*0.85,i:'brass',v:v2*0.5}); + if(rep2>1&&n[2]===0)bg.push({t:t,f:G3,d:0.15,i:'timpani',v:v2*0.5}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q*0.5; + } + + // === SECTION 5 (44-56s): Ascending fanfare + gallop intensifies === + // Brass fanfare ascending + var fanfare=[[G4,0],[B4,3],[D5,1],[G5,3],[D5,1],[B4,3],[G4,0]]; + for(var ff=0;ff<2;ff++){ + fanfare.forEach(function(n){ + brs(t,n[0],q*0.85,0.55);str(t,n[0],q*0.85,0.45); + mel.push({t:t,l:n[1]});t+=q; + }); + bg.push({t:t,f:G3,d:0.4,i:'timpani',v:0.5});mel.push({t:t,l:4});t+=q*1.5; + } + // Double-time gallop + var dTrip=trip*0.8; + for(var dg=0;dg<4;dg++){ + var vd=0.5+dg*0.04; + gallop1.slice(0,10).forEach(function(n){ + tutti(t,n[0],n[1]*0.7,vd);mel.push({t:t,l:n[2]});t+=n[1]*0.8; + }); + t+=q*0.3; + } + + // === SECTION 6 (56-68s): Final gallop — full speed === + for(var fg=0;fg<4;fg++){ + var vf=0.55+fg*0.05; + gallop1.forEach(function(n){ + tutti(t,n[0],n[1]*0.7,vf); + brs(t,n[0],n[1]*0.7,vf*0.6); + if(fg>1)bg.push({t:t,f:n[0],d:n[1]*0.7,i:'choir',v:vf*0.25}); + mel.push({t:t,l:n[2]});t+=n[1]*0.75; + }); + bg.push({t:t,f:G3,d:0.3,i:'timpani',v:vf*0.7});mel.push({t:t,l:4});t+=q*0.5; + } + + // === FINALE: Big G major chords === + for(var c=0;c<6;c++){ + [G3,B3,D4,G4,B4,D5].forEach(function(f){brs(t,f,0.4,0.65);str(t,f,0.4,0.55);}); + bg.push({t:t,f:G3/2,d:0.4,i:'timpani',v:0.65});mel.push({t:t,l:4});t+=0.5; + } + [G3,B3,D4,G4,B4,D5].forEach(function(f){brs(t,f,3.0,0.7);str(t,f,3.0,0.6);}); + bg.push({t:t,f:G3/2,d:2.5,i:'timpani',v:0.7});mel.push({t:t,l:4}); + + return {n:"William Tell Overture (Gallop)",composer:"Rossini",bpm:152,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; + })(); // ── Bolero ── - var bolero=tp("Bolero","Ravel",72, - [C4,D4,E4,F4,E4,D4,C4,C4,D4,E4,F4,G4,F4,E4,D4,C4,E4,G4,E4,C4], - [0,1,2,3,2,1,0,0,1,2,3,0,3,2,1,0,2,0,2,0], - [{d:0.38,v:0.15,i:'woodwind'},{d:0.36,v:0.2,i:'woodwind'},{d:0.34,v:0.28,i:'strings'},{d:0.32,v:0.35,i:'strings'},{d:0.30,v:0.42,i:'strings'},{d:0.28,v:0.5,i:'brass'},{d:0.26,v:0.58,i:'brass'}], - [C4,E4,G4,C5]); + // Ravel's Bolero in C major, ~90s + // Built around an endlessly repeating snare drum rhythm that crescendos + // The melody is stated by different instruments, each time louder + var bolero=(function(){ + var bg=[],mel=[],t=0,q=60/72; + + // The iconic Bolero snare rhythm: 3+3+3+3+2+2 pattern per bar + // ta-ta-ta ta-ta-ta ta-ta-ta ta-ta-ta ta-ta ta-ta + function snareBar(time,v){ + var s=q/3; + for(var g=0;g<4;g++){ + for(var n=0;n<3;n++){bg.push({t:time+g*q+n*s,f:300,d:0.05,i:'woodwind',v:v*0.3});} + } + // The two duplets at end + bg.push({t:time+q*4,f:300,d:0.05,i:'woodwind',v:v*0.35}); + bg.push({t:time+q*4+q/2,f:300,d:0.05,i:'woodwind',v:v*0.35}); + bg.push({t:time+q*5,f:300,d:0.05,i:'woodwind',v:v*0.35}); + bg.push({t:time+q*5+q/2,f:300,d:0.05,i:'woodwind',v:v*0.35}); + } + + // Bolero Theme A (C major): C-D-E-F-E-D-E-C | E-C-D-C-B3-C-D-E-F-E-D-C + var themeA=[[C4,q,0],[D4,q,1],[E4,q*0.5,2],[F4,q*0.5,3],[E4,q*0.5,2],[D4,q*0.5,1], + [E4,q,2],[C4,q*2,0], + [E4,q*0.5,2],[C4,q*0.5,0],[D4,q*0.5,1],[C4,q*0.5,0],[B3,q*0.5,3], + [C4,q*0.5,0],[D4,q,1],[E4,q*0.5,2],[F4,q*0.5,3],[E4,q*0.5,2],[D4,q*0.5,1],[C4,q*2,0]]; + + // Bolero Theme B (chromatic inflection): C-D-Eb-D-C-D-Eb-F-Eb-D-C-Bb3-C + var themeB=[[C4,q,0],[D4,q*0.5,1],[Eb4,q*0.5,2],[D4,q*0.5,1],[C4,q*0.5,0], + [D4,q*0.5,1],[Eb4,q*0.5,2],[F4,q,3],[Eb4,q*0.5,2],[D4,q*0.5,1], + [C4,q,0],[Bb3,q,3],[C4,q*2,0]]; + + // Continuous harmonic bed — very sparse at first, grows + var harm=[ + [0,20,[C3,G3,C4],0.06],[20,40,[C3,G3,C4],0.1],[40,60,[C3,G3,C4],0.15], + [60,80,[C3,G3,C4],0.2],[80,95,[C3,G3,E4],0.25] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht=3)bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:st.v*0.4}); + if(si>=4)bg.push({t:t,f:n[0]*1.5,d:n[1]*0.9,i:'strings',v:st.v*0.3}); + if(si>=5){ + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'strings',v:st.v*0.5}); + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:st.v*0.25}); + } + if(si>=6&&n[2]===0)bg.push({t:t,f:C3,d:0.2,i:'timpani',v:st.v*0.5}); + mel.push({t:t,l:n[2]}); + t+=n[1]; + }); + // Kick hit at end of each statement + bg.push({t:t,f:C3,d:0.3,i:'timpani',v:0.15+si*0.06}); + mel.push({t:t,l:4}); + t+=q*2; + }); + + // === FINALE: Modulation up + massive crescendo === + // Theme in Db (up a half step) — the famous key change + var finaleTheme=[[Db4,q*0.8,0],[Eb4,q*0.4,1],[F4,q*0.4,3],[Eb4,q*0.4,1],[Db4,q*0.4,0], + [Eb4,q*0.8,1],[Db4,q*1.5,0]]; + for(var fc=0;fc<2;fc++){ + var fv=0.6+fc*0.08; + snareBar(t,0.4+fc*0.05); + finaleTheme.forEach(function(n){ + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'brass',v:fv}); + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'strings',v:fv*0.8}); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:fv*0.5}); + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:fv*0.3}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + bg.push({t:t,f:Db4/2,d:0.3,i:'timpani',v:fv*0.7});mel.push({t:t,l:4});t+=q; + } + + // Final massive C chord + t+=q; + [C3,G3,C4,E4,G4,C5].forEach(function(f){ + bg.push({t:t,f:f,d:3.5,i:'brass',v:0.7});bg.push({t:t,f:f,d:3.5,i:'strings',v:0.6}); + bg.push({t:t,f:f,d:3.5,i:'choir',v:0.35}); + }); + bg.push({t:t,f:C3/2,d:3.0,i:'timpani',v:0.75});mel.push({t:t,l:4}); + + return {n:"Bolero",composer:"Ravel",bpm:72,duration:Math.ceil(t+4),isClassical:true,bg:bg,melody:mel}; + })(); // ── Barber of Seville Overture ── - var barber=tp("Barber of Seville Overture","Rossini",144, - [G4,A4,B4,G4,E4,G4,A4,B4,C5,B4,A4,G4,E4,D4,E4,G4,B4,D5,C5,B4], - [0,1,3,0,2,0,1,3,0,3,1,0,2,1,2,0,3,1,0,3], - [{d:0.24,v:0.22,i:'strings'},{d:0.22,v:0.3,i:'strings'},{d:0.20,v:0.38,i:'strings'},{d:0.18,v:0.42,i:'strings'},{d:0.16,v:0.48,i:'brass'},{d:0.14,v:0.54,i:'brass'},{d:0.12,v:0.6,i:'brass'}], - [G4,B4,D5,G5]); + // Rossini's famous overture in E major, ~75s + // Quiet opening → crescendo string runs → the "Rossini crescendo" + var barber=(function(){ + var bg=[],mel=[],t=0,q=60/144; + function str(t,f,d,v){bg.push({t:t,f:f,d:d,i:'strings',v:v||0.4});} + function brs(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.4});} + + // Harmonic bed + var harm=[ + [0,12,[E3,G3,B3],0.08],[12,28,[E3,G3,B3],0.14],[28,44,[E3,G3,B3],0.18], + [44,56,[A3,C4,E4],0.16],[56,72,[E3,G3,B3],0.22],[72,80,[E3,G3,B3],0.25] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht=1)str(t,n[0],n[1]*0.85,cv*0.6); + if(cr>=2)bg.push({t:t,f:n[0]/2,d:n[1]*0.85,i:'bass',v:cv*0.4}); + if(cr>=3){brs(t,n[0],n[1]*0.85,cv*0.5);bg.push({t:t,f:n[0],d:n[1]*0.85,i:'choir',v:cv*0.2});} + mel.push({t:t,l:n[2]});t+=n[1]; + }); + // Punctuating chord + if(cr>=2){bg.push({t:t,f:E3,d:0.3,i:'timpani',v:cv*0.5});} + mel.push({t:t,l:4});t+=q*1.5; + } + + // === SECTION 3 (28-44s): Running string passages === + // Fast scalar runs — the hallmark of Rossini + var run1=[E4,G4,B4,E5,D5,B4,G4,E4,D4,E4,G4,B4,D5,E5,D5,B4]; + var r1Ln=[2,3,0,2,1,0,3,2,1,2,3,0,1,2,1,0]; + for(var rr=0;rr<3;rr++){ + var rv=0.4+rr*0.06; + var rq=q*(0.5-rr*0.05); // speeds up each time + run1.forEach(function(f,i){ + str(t,f,rq*0.85,rv); + if(rr>0)brs(t,f,rq*0.85,rv*0.4); + if(rr>1)bg.push({t:t,f:f/2,d:rq*0.85,i:'bass',v:rv*0.3}); + mel.push({t:t,l:r1Ln[i]});t+=rq; + }); + // Big chord punctuation + [E3,B3,E4,G4].forEach(function(f){brs(t,f,0.4,rv);str(t,f,0.4,rv*0.8);}); + bg.push({t:t,f:E3/2,d:0.3,i:'timpani',v:rv*0.6});mel.push({t:t,l:4});t+=q*2; + } + + // === SECTION 4 (44-56s): Lyrical contrasting theme === + var lyric=[[B4,q*1.5,0],[A4,q*0.5,1],[G4,q,3],[E4,q,2],[G4,q*1.5,3],[A4,q*0.5,1], + [B4,q*2,0],[E5,q*1.5,2],[D5,q*0.5,1],[B4,q,0],[G4,q,3],[E4,q*2,2]]; + for(var ll=0;ll<2;ll++){ + var lv=0.4+ll*0.1; + lyric.forEach(function(n){ + str(t,n[0],n[1]*0.9,lv);brs(t,n[0],n[1]*0.9,lv*0.5); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:lv*0.35}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + } + + // === SECTION 5 (56-72s): Final Rossini crescendo + runs === + for(var fc=0;fc<3;fc++){ + var fv=0.5+fc*0.06; + var fq=q*(0.45-fc*0.04); + run1.forEach(function(f,i){ + str(t,f,fq*0.85,fv);brs(t,f,fq*0.85,fv*0.6); + bg.push({t:t,f:f/2,d:fq*0.85,i:'bass',v:fv*0.4}); + if(fc>0&&i%4===0)bg.push({t:t,f:E3,d:0.15,i:'timpani',v:fv*0.5}); + mel.push({t:t,l:r1Ln[i]});t+=fq; + }); + t+=q*0.5; + } + + // === FINALE: Chords === + for(var c=0;c<6;c++){ + [E3,B3,E4,G4,B4].forEach(function(f){brs(t,f,0.35,0.65);str(t,f,0.35,0.55);}); + bg.push({t:t,f:E3/2,d:0.35,i:'timpani',v:0.6});mel.push({t:t,l:4});t+=0.45; + } + [E3,B3,E4,G4,B4,E5].forEach(function(f){brs(t,f,3.0,0.7);str(t,f,3.0,0.6);}); + bg.push({t:t,f:E3/2,d:2.5,i:'timpani',v:0.7});mel.push({t:t,l:4}); + + return {n:"Barber of Seville Overture",composer:"Rossini",bpm:144,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; + })(); // ── Sabre Dance ── - var sabre=tp("Sabre Dance","Khachaturian",168, - [D4,D4,D4,Eb4,D4,D4,D4,Eb4,D4,E4,F4,G4,A4,G4,F4,E4,D4,D4,D4,A3], - [0,0,0,1,0,0,0,1,0,2,3,0,1,0,3,2,0,0,0,4], - [{d:0.24,v:0.28,i:'strings'},{d:0.22,v:0.34,i:'strings'},{d:0.20,v:0.4,i:'strings'},{d:0.18,v:0.46,i:'brass'},{d:0.16,v:0.52,i:'brass'},{d:0.14,v:0.56,i:'brass'},{d:0.12,v:0.6,i:'brass'},{d:0.10,v:0.65,i:'brass'}], - [D4,F4,A4,D5]); + // Khachaturian's frenetic Sabre Dance in D minor, ~75s + // Famous for its relentless, driving ostinato + var sabre=(function(){ + var bg=[],mel=[],t=0,q=60/168; + function str(t,f,d,v){bg.push({t:t,f:f,d:d,i:'strings',v:v||0.4});} + function brs(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.4});} + function tutti(t,f,d,v){str(t,f,d,v);brs(t,f,d,(v||0.4)*0.6);bg.push({t:t,f:f/2,d:d,i:'bass',v:(v||0.4)*0.4});} + + // Harmonic bed + var harm=[ + [0,15,[D3,A3,D4],0.1],[15,30,[D3,A3,D4],0.15],[30,50,[D3,F3,A3],0.18], + [50,65,[D3,A3,D4],0.2],[65,80,[D3,A3,D4],0.25] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht=3)brs(t,n[0],n[1]*0.7,ov*0.5); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + // Ascending burst: D-E-F-G-A + [D4,E4,F4,G4,A4].forEach(function(f,i){ + str(t,f,q*0.4,ov);mel.push({t:t,l:[0,2,3,0,1][i]});t+=q*0.5; + }); + bg.push({t:t,f:D3,d:0.2,i:'timpani',v:ov*0.6});mel.push({t:t,l:4});t+=q; + } + + // === SECTION 2 (15-30s): Contrasting lyrical middle section === + // Slower, sweeping melody in strings over sustained chords + var lyric=[[A4,q*2,1],[G4,q,0],[F4,q,3],[E4,q*2,2],[D4,q,0], + [F4,q*2,3],[E4,q,2],[D4,q,0],[A3,q*2,1],[D4,q*3,0]]; + for(var lr=0;lr<3;lr++){ + var lv=0.35+lr*0.08; + lyric.forEach(function(n){ + str(t,n[0],n[1]*0.9,lv); + if(lr>0)brs(t,n[0],n[1]*0.9,lv*0.5); + if(lr>1)bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:lv*0.4}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + if(lr>0){bg.push({t:t,f:D3,d:0.3,i:'timpani',v:lv*0.5});mel.push({t:t,l:4});t+=q;} + t+=q; + } + + // === SECTION 3 (30-50s): Ostinato returns — faster, louder === + var fastOst=[[D4,q*0.4,0],[D4,q*0.4,0],[D4,q*0.4,0],[Eb4,q*0.4,1],[D4,q*0.4,0], + [D4,q*0.4,0],[Eb4,q*0.4,1],[F4,q*0.4,3]]; + for(var fo=0;fo<6;fo++){ + var fv=0.45+fo*0.04; + fastOst.forEach(function(n){ + tutti(t,n[0],n[1]*0.7,fv); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + // Ascending chromatic burst + [D4,Eb4,E4,F4,G4,Ab4,A4,Bb4].forEach(function(f,i){ + str(t,f,q*0.35,fv);brs(t,f,q*0.35,fv*0.5); + mel.push({t:t,l:[0,1,2,3,0,1,1,2][i]});t+=q*0.4; + }); + // Slam + [D4,A4,D5].forEach(function(f){brs(t,f,0.3,fv);}); + bg.push({t:t,f:D3,d:0.3,i:'timpani',v:fv*0.7});mel.push({t:t,l:4});t+=q; + } + + // === SECTION 4 (50-65s): Wild descending runs + ostinato === + var desc=[A4,G4,F4,E4,D4,E4,F4,G4,A4,Bb4,A4,G4,F4,E4,D4,A3]; + var dLn=[1,0,3,2,0,2,3,0,1,2,1,0,3,2,0,4]; + for(var dr=0;dr<3;dr++){ + var dv=0.55+dr*0.05; + var dq=q*(0.45-dr*0.04); + desc.forEach(function(f,i){ + tutti(t,f,dq*0.8,dv); + if(dr>0)bg.push({t:t,f:f,d:dq*0.8,i:'brass',v:dv*0.5}); + if(dr>1&&i%4===0)bg.push({t:t,f:D3,d:0.15,i:'timpani',v:dv*0.6}); + mel.push({t:t,l:dLn[i]});t+=dq; + }); + t+=q*0.5; + // Ostinato fragment + fastOst.forEach(function(n){ + tutti(t,n[0],n[1]*0.65,dv);mel.push({t:t,l:n[2]});t+=n[1]*0.85; + }); + t+=q*0.5; + } + + // === FINALE: Hammered D minor chords === + for(var c=0;c<8;c++){ + [D3,A3,D4,F4,A4].forEach(function(f){brs(t,f,0.3,0.65);str(t,f,0.3,0.55);}); + bg.push({t:t,f:D3/2,d:0.3,i:'timpani',v:0.65});mel.push({t:t,l:4});t+=0.38; + } + [D3,A3,D4,F4,A4,D5].forEach(function(f){brs(t,f,2.5,0.7);str(t,f,2.5,0.6);}); + bg.push({t:t,f:D3/2,d:2.0,i:'timpani',v:0.75});mel.push({t:t,l:4}); + + return {n:"Sabre Dance",composer:"Khachaturian",bpm:168,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; + })(); // ── Sorcerer's Apprentice ── - var sorcerer=tp("Sorcerer's Apprentice","Dukas",132, - [A3,E4,C4,E4,A3,E4,C4,E4,A3,B3,C4,D4,E4,D4,C4,B3,A3,C4,E4,A4], - [0,2,1,2,0,2,1,2,0,1,2,0,2,0,2,1,0,1,2,3], - [{d:0.28,v:0.2,i:'woodwind'},{d:0.26,v:0.28,i:'woodwind'},{d:0.24,v:0.35,i:'strings'},{d:0.22,v:0.42,i:'strings'},{d:0.20,v:0.5,i:'brass'},{d:0.18,v:0.58,i:'brass'}], - [A3,C4,E4,A4]); + // Dukas's magical march in F minor, ~80s + // Famous bassoon theme → march builds → magical chaos + var sorcerer=(function(){ + var bg=[],mel=[],t=0,q=60/132; + function ww(t,f,d,v){bg.push({t:t,f:f,d:d,i:'woodwind',v:v||0.3});} + function str(t,f,d,v){bg.push({t:t,f:f,d:d,i:'strings',v:v||0.4});} + function brs(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.4});} + + // Harmonic bed — mysterious + var harm=[ + [0,16,[F3,Ab3,C4],0.06],[16,32,[F3,Ab3,C4],0.1],[32,48,[F3,Ab3,C4],0.15], + [48,64,[Bb3,Db4,F4],0.18],[64,82,[F3,Ab3,C4],0.22] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht0)str(t,n[0]*2,n[1]*0.85,bv*0.3); // octave higher strings echo + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + } + + // === SECTION 2 (16-32s): March begins — walking brooms === + // Steady march rhythm with the theme on top + var march=[[C4,q,2],[C4,q*0.5,2],[Ab3,q*0.5,1],[F3,q,0],[Ab3,q*0.5,1],[C4,q*0.5,2], + [Eb4,q,3],[Db4,q*0.5,0],[C4,q*0.5,2],[Ab3,q,1],[F3,q*1.5,0]]; + for(var mr=0;mr<4;mr++){ + var mv=0.3+mr*0.06; + var mInst=mr<2?'woodwind':'strings'; + // March bass: oom-pah + for(var mb=0;mb<6;mb++){ + bg.push({t:t+mb*q*2,f:F3,d:q*0.8,i:'bass',v:mv*0.5}); + bg.push({t:t+mb*q*2+q,f:C3,d:q*0.8,i:'bass',v:mv*0.4}); + if(mr>=2)bg.push({t:t+mb*q*2,f:F3,d:0.15,i:'timpani',v:mv*0.4}); + } + march.forEach(function(n){ + bg.push({t:t,f:n[0],d:n[1]*0.85,i:mInst,v:mv}); + if(mr>=2)brs(t,n[0],n[1]*0.85,mv*0.4); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + } + + // === SECTION 3 (32-48s): Chaos builds — theme fragments overlap === + // Faster fragments of the theme, like multiple brooms marching + var frag1=[[F3,q*0.5,0],[Ab3,q*0.5,1],[C4,q*0.5,2],[Eb4,q*0.5,3],[C4,q*0.5,2],[Ab3,q*0.5,1]]; + var frag2=[[C4,q*0.5,2],[Db4,q*0.5,0],[C4,q*0.5,2],[Ab3,q*0.5,1],[F3,q*0.5,0],[Ab3,q*0.5,1]]; + for(var ch=0;ch<4;ch++){ + var cv=0.4+ch*0.05; + (ch%2===0?frag1:frag2).forEach(function(n){ + str(t,n[0],n[1]*0.8,cv);brs(t,n[0],n[1]*0.8,cv*0.5); + bg.push({t:t,f:n[0]/2,d:n[1]*0.8,i:'bass',v:cv*0.4}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + // Ascending rush + [F3,Ab3,C4,Eb4,F4,Ab4].forEach(function(f,i){ + str(t,f,q*0.35,cv);mel.push({t:t,l:[0,1,2,3,0,1][i]});t+=q*0.4; + }); + bg.push({t:t,f:F3,d:0.3,i:'timpani',v:cv*0.6});mel.push({t:t,l:4});t+=q; + } + + // === SECTION 4 (48-64s): Full orchestra — magical pandemonium === + // Full theme at double speed with brass + var fullTheme=[[F4,q*0.4,0],[Ab4,q*0.4,1],[C5,q*0.4,2],[Ab4,q*0.4,1],[F4,q*0.4,0], + [Ab4,q*0.4,1],[C5,q*0.4,2],[Eb5,q*0.4,3],[C5,q*0.4,2],[Ab4,q*0.4,1], + [F4,q*0.8,0],[C5,q*0.4,2],[Ab4,q*0.4,1],[F4,q*0.8,0]]; + for(var ft=0;ft<4;ft++){ + var fv=0.5+ft*0.05; + fullTheme.forEach(function(n){ + str(t,n[0],n[1]*0.8,fv);brs(t,n[0],n[1]*0.8,fv*0.6); + bg.push({t:t,f:n[0]/2,d:n[1]*0.8,i:'bass',v:fv*0.4}); + if(ft>1)bg.push({t:t,f:n[0],d:n[1]*0.8,i:'choir',v:fv*0.2}); + if(ft>2&&n[2]===0)bg.push({t:t,f:F3,d:0.15,i:'timpani',v:fv*0.5}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + bg.push({t:t,f:F3,d:0.3,i:'timpani',v:fv*0.6});mel.push({t:t,l:4});t+=q; + } + + // === SECTION 5 (64-78s): Wild ending === + // Descending cascades + [C5,Bb4,Ab4,G4,F4,Eb4,Db4,C4,Bb3,Ab3,G3,F3].forEach(function(f,i){ + str(t,f,q*0.3,0.55);brs(t,f,q*0.3,0.45); + mel.push({t:t,l:[2,3,1,0,3,2,0,1,3,1,0,4][i]});t+=q*0.35; + }); + t+=q; + + // Final chords + for(var c=0;c<6;c++){ + [F3,C4,F4,Ab4].forEach(function(f){brs(t,f,0.35,0.65);str(t,f,0.35,0.55);}); + bg.push({t:t,f:F3/2,d:0.35,i:'timpani',v:0.6});mel.push({t:t,l:4});t+=0.45; + } + [F3,C4,F4,Ab4,C5].forEach(function(f){brs(t,f,3.0,0.65);str(t,f,3.0,0.55);}); + bg.push({t:t,f:F3/2,d:2.5,i:'timpani',v:0.7});mel.push({t:t,l:4}); + + return {n:"Sorcerer's Apprentice",composer:"Dukas",bpm:132,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; + })(); // ── Morning Mood ── - var morning=tp("Morning Mood","Grieg",60, - [F4,A4,C5,A4,F4,A4,C5,E5,F5,E5,C5,A4,F4,G4,A4,Bb4,C5,Bb4,A4,F4], - [0,1,2,1,0,1,2,3,0,3,2,1,0,1,1,2,2,2,1,0], - [{d:0.45,v:0.15,i:'woodwind'},{d:0.42,v:0.2,i:'woodwind'},{d:0.39,v:0.28,i:'woodwind'},{d:0.36,v:0.35,i:'strings'},{d:0.33,v:0.42,i:'strings'},{d:0.30,v:0.5,i:'brass'}], - [F4,A4,C5,F5]); + // Grieg's Peer Gynt — gentle sunrise in E major, ~80s + // Famous flute melody: G#-A-B-C#-B-A, then G#-A-B-C#-E-D#-C#-B-A-G# + var morning=(function(){ + var bg=[],mel=[],t=0,q=60/60; // slow, pastoral tempo + function ww(t,f,d,v){bg.push({t:t,f:f,d:d,i:'woodwind',v:v||0.25});} + function str(t,f,d,v){bg.push({t:t,f:f,d:d,i:'strings',v:v||0.3});} + function brs(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.35});} + + // Gentle harmonic bed — E major sustained strings + var harm=[ + [0,18,[E3,Ab3,B3],0.06],[18,36,[E3,Ab3,B3],0.1],[36,54,[E3,Ab3,B3],0.15], + [54,70,[A3,Db4,E4],0.14],[70,85,[E3,Ab3,B3],0.18] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht0)bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:wv*0.2}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + } + + // === SECTION 5 (70-82s): Final sunrise — melody one last time, full and warm === + fluteMel1.forEach(function(n){ + str(t,n[0],n[1]*0.9,0.5);brs(t,n[0],n[1]*0.9,0.35);ww(t,n[0],n[1]*0.9,0.3); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:0.25}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q*0.5; + fluteMel2.forEach(function(n){ + str(t,n[0],n[1]*0.9,0.5);brs(t,n[0],n[1]*0.9,0.35);ww(t,n[0],n[1]*0.9,0.3); + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:0.2}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + + // Gentle ending — sustained E major chord fading + [E3,Ab3,B3,E4,Ab4,B4,E5].forEach(function(f){ + str(t,f,4.0,0.4);ww(t,f,4.0,0.25); + }); + bg.push({t:t,f:E3/2,d:3.0,i:'bass',v:0.2});mel.push({t:t,l:4}); + + return {n:"Morning Mood",composer:"Grieg",bpm:60,duration:Math.ceil(t+4),isClassical:true,bg:bg,melody:mel}; + })(); // ── Mars, Bringer of War ── var mars=(function(){ @@ -1652,14 +2301,14 @@ const CLASSICAL_PIECES=(function(){ var toccata=(function(){ var bg=[],mel=[],t=0; function org(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.4});bg.push({t:t,f:f,d:d,i:'woodwind',v:(v||0.4)*0.5});} - // Opening trill: A-Ab-A - org(0,A4,0.12,0.55);org(0.15,Ab4,0.12,0.55);org(0.3,A4,0.9,0.6); - mel.push({t:0,l:0},{t:0.15,l:1},{t:0.3,l:0}); + // Opening mordent: A-G-A (whole step, per standard editions) + org(0,A4,0.12,0.55);org(0.15,G4,0.12,0.55);org(0.3,A4,0.9,0.6); + mel.push({t:0,l:0},{t:0.15,l:3},{t:0.3,l:0}); // Descending: G-F-E-D [G4,F4,E4,D4].forEach(function(f,i){org(1.3+i*0.4,f,0.35,0.55);mel.push({t:1.3+i*0.4,l:[3,2,1,0][i]});}); // Lower octave statement - org(3.2,A3,0.12,0.55);org(3.35,Ab3,0.12,0.55);org(3.5,A3,0.9,0.6); - mel.push({t:3.2,l:0},{t:3.35,l:1},{t:3.5,l:0}); + org(3.2,A3,0.12,0.55);org(3.35,G3,0.12,0.55);org(3.5,A3,0.9,0.6); + mel.push({t:3.2,l:0},{t:3.35,l:3},{t:3.5,l:0}); [G3,F3,E3,D3].forEach(function(f,i){org(4.5+i*0.4,f,0.35,0.55);bg.push({t:4.5+i*0.4,f:f,d:0.35,i:'bass',v:0.45});mel.push({t:4.5+i*0.4,l:[3,2,1,4][i]});}); // D minor chord t=6.2; @@ -1673,28 +2322,95 @@ const CLASSICAL_PIECES=(function(){ // Big chord [D3,A3,D4,F4,A4].forEach(function(f){org(t,f,1.5,0.6);}); bg.push({t:t,f:D3/2,d:1.2,i:'timpani',v:0.55});mel.push({t:t,l:4});t+=1.8; - // Fugue: 6 entries accelerating + + // === Toccata continuation: dramatic recitative-like passages === + // Rapid ascending arpeggios (organ virtuosity) + var arp1=[D4,F4,A4,D5,F5,D5,A4,F4]; + var a1Ln=[0,2,0,1,2,1,0,2]; + [0.18,0.16,0.14].forEach(function(spd,si){ + var av=0.4+si*0.06; + arp1.forEach(function(f,i){org(t,f,spd*0.8,av);mel.push({t:t,l:a1Ln[i]});t+=spd;}); + t+=0.2; + }); + // Sustained D minor chord with pedal point + [D3,A3,D4,F4,A4].forEach(function(f){org(t,f,2.5,0.6);}); + bg.push({t:t,f:D3/2,d:2.0,i:'timpani',v:0.55});mel.push({t:t,l:4});t+=3.0; + + // === Second toccata section: sequence descending through keys === + // D minor → C major → Bb major → A major (dominant) + var seqKeys=[[D4,F4,A4,D5],[C4,E4,G4,C5],[Bb3,D4,F4,Bb4],[A3,Db4,E4,A4]]; + seqKeys.forEach(function(ch,ki){ + var sv=0.45+ki*0.04; + // Rapid broken chord + ch.forEach(function(f,i){org(t,f,0.15,sv);mel.push({t:t,l:[0,1,2,3][i]});t+=0.16;}); + // Sustained chord + ch.forEach(function(f){org(t,f,1.2,sv);}); + mel.push({t:t,l:4});t+=1.5; + }); + t+=0.5; + + // === Dramatic ascending chromatic passage === + [D4,Eb4,E4,F4,Gb4,G4,Ab4,A4,Bb4,B4,C5,Db5,D5].forEach(function(f,i){ + org(t,f,0.14,0.5+i*0.01); + bg.push({t:t,f:f/2,d:0.14,i:'bass',v:0.3}); + mel.push({t:t,l:[0,1,2,3][i%4]});t+=0.15; + }); + // Massive Neapolitan chord → V → i cadence + [Eb4,G4,Bb4,Eb5].forEach(function(f){org(t,f,1.5,0.6);});mel.push({t:t,l:4});t+=1.8; + [A3,Db4,E4,A4].forEach(function(f){org(t,f,1.2,0.6);});mel.push({t:t,l:4});t+=1.5; + + // === Fugue: subject entries building in intensity === var subj=[D4,E4,F4,G4,A4,Bb4,A4,G4,F4,E4,D4,A3,D4]; var sLn=[0,1,2,3,0,2,0,3,2,1,0,4,0]; - var speeds=[0.30,0.26,0.23,0.20,0.17,0.14]; - var vols=[0.3,0.35,0.4,0.48,0.55,0.62]; + // 8 entries from slow to fast, quiet to loud + var speeds=[0.32,0.28,0.25,0.22,0.20,0.18,0.16,0.14]; + var vols=[0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.62]; speeds.forEach(function(spd,si){ subj.forEach(function(f,i){ org(t,f,spd*0.85,vols[si]); if(si>1)bg.push({t:t,f:f/2,d:spd*0.85,i:'bass',v:vols[si]*0.5}); - if(si>3)bg.push({t:t,f:f,d:spd*0.85,i:'strings',v:vols[si]*0.4}); - if(si>3&&i%3===0)bg.push({t:t,f:D3,d:0.3,i:'timpani',v:vols[si]*0.6}); + if(si>3){ + bg.push({t:t,f:f,d:spd*0.85,i:'strings',v:vols[si]*0.4}); + if(i%3===0)bg.push({t:t,f:D3,d:0.3,i:'timpani',v:vols[si]*0.6}); + } mel.push({t:t,l:sLn[i]});t+=spd; }); - t+=0.4; + t+=0.35; }); - // Final cascade + + // === Stretto: subject entries overlapping, maximum intensity === + // Two interleaved subjects at breakneck speed + var strSpd=0.12; + subj.forEach(function(f,i){ + org(t,f,strSpd*0.85,0.65);org(t,f*2,strSpd*0.85,0.4); + bg.push({t:t,f:f/2,d:strSpd*0.85,i:'bass',v:0.5}); + bg.push({t:t,f:f,d:strSpd*0.85,i:'strings',v:0.45}); + if(i%2===0)bg.push({t:t,f:D3,d:0.2,i:'timpani',v:0.6}); + mel.push({t:t,l:sLn[i]});t+=strSpd; + }); + t+=0.3; + + // === Grand finale: cascading scales and massive chords === + // Descending cascade [D5,C5,Bb4,A4,G4,F4,E4,D4,C4,Bb3,A3,G3].forEach(function(f,i){ - org(t,f,0.13,0.6);bg.push({t:t,f:f,d:0.13,i:'strings',v:0.4});mel.push({t:t,l:[0,2,3,1][i%4]});t+=0.14; + org(t,f,0.12,0.6);bg.push({t:t,f:f,d:0.12,i:'strings',v:0.4});mel.push({t:t,l:[0,2,3,1][i%4]});t+=0.13; }); - t+=0.2; - [D3,A3,D4,F4,A4,D5].forEach(function(f){org(t,f,3.0,0.7);}); - bg.push({t:t,f:D3/2,d:2.5,i:'timpani',v:0.7});mel.push({t:t,l:4}); + t+=0.15; + // Ascending cascade + [D3,E3,F3,G3,A3,Bb3,C4,D4,E4,F4,G4,A4,Bb4,C5,D5].forEach(function(f,i){ + org(t,f,0.11,0.6);bg.push({t:t,f:f,d:0.11,i:'strings',v:0.45});mel.push({t:t,l:[0,1,2,3][i%4]});t+=0.12; + }); + t+=0.3; + + // Final massive chords: iv-V-i (plagal approach) + for(var fc=0;fc<3;fc++){ + var fch=[[G3,Bb3,D4,G4],[A3,Db4,E4,A4],[D3,A3,D4,F4,A4,D5]][fc]; + fch.forEach(function(f){org(t,f,0.8,0.65);bg.push({t:t,f:f,d:0.8,i:'strings',v:0.5});}); + bg.push({t:t,f:D3/2,d:0.7,i:'timpani',v:0.6});mel.push({t:t,l:4});t+=1.0; + } + // Sustained final D minor + [D3,A3,D4,F4,A4,D5].forEach(function(f){org(t,f,4.0,0.7);bg.push({t:t,f:f,d:4.0,i:'strings',v:0.5});}); + bg.push({t:t,f:D3/2,d:3.5,i:'timpani',v:0.7});mel.push({t:t,l:4}); return {n:"Toccata & Fugue in D Minor",composer:"Bach",bpm:100,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; })(); @@ -1749,45 +2465,107 @@ const CLASSICAL_PIECES=(function(){ })(); // ── The Blue Danube ── + // J. Strauss II waltz in D major (arr. C major), ~75s + // The most famous waltz: ascending thirds C-E-G, G-B-D with oom-pah-pah bass var danube=(function(){ - var bg=[],mel=[],t=0,q=0.5; - // Intro: gentle ascending - [C4,E4,G4,C5,E5,C5,G4,E4].forEach(function(f,i){ - bg.push({t:t,f:f,d:q*2,i:'strings',v:0.25});mel.push({t:t,l:[0,2,3,0,2,0,3,2][i]});t+=q*1.5; - }); - t+=0.5; - // Theme 1: the famous waltz melody - var th1=[[E4,q,2],[E4,q*2,2],[G4,q,3],[G4,q*2,3],[F4,q,1],[F4,q,1],[E4,q,2],[D4,q*2,0],[C4,q,0],[E4,q,2],[G4,q*2,3],[C5,q*3,0]]; - for(var r1=0;r1<2;r1++){ - var v1=0.3+r1*0.1; - th1.forEach(function(n){bg.push({t:t,f:n[0],d:n[1]*0.9,i:r1<1?'strings':'brass',v:v1});mel.push({t:t,l:n[2]});t+=n[1];}); - t+=0.4; + var bg=[],mel=[],t=0,q=60/180; // waltz tempo, q = one beat of 3/4 + + // Waltz oom-pah-pah accompaniment helper + function waltz(time,root,third,v){ + bg.push({t:time,f:root,d:q*0.8,i:'bass',v:v*0.5}); // oom + bg.push({t:time+q,f:third,d:q*0.6,i:'strings',v:v*0.25}); // pah + bg.push({t:time+q*2,f:third,d:q*0.6,i:'strings',v:v*0.2}); // pah } - // Theme 2: contrasting phrase - var th2=[[G4,q,3],[A4,q,1],[G4,q,3],[E4,q*2,2],[C4,q,0],[D4,q,0],[E4,q,2],[F4,q,1],[E4,q*2,2],[D4,q,0],[C4,q*3,0]]; - for(var r2=0;r2<2;r2++){ - var v2=0.4+r2*0.1; - th2.forEach(function(n){ - bg.push({t:t,f:n[0],d:n[1]*0.9,i:'strings',v:v2}); - if(r2>0)bg.push({t:t,f:n[0],d:n[1]*0.9,i:'brass',v:v2*0.5}); + function str(t,f,d,v){bg.push({t:t,f:f,d:d,i:'strings',v:v||0.4});} + function brs(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.35});} + + // Harmonic bed + var harm=[ + [0,12,[C3,E3,G3],0.06],[12,30,[C3,E3,G3],0.1],[30,50,[C3,E3,G3],0.14], + [50,65,[G3,B3,D4],0.12],[65,80,[C3,E3,G3],0.18] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht0)brs(t,n[0],n[1]*0.9,wv*0.4); + // Add waltz bass on beat 1 of each 3-beat group + if(n[1]>=q*2)waltz(t,C3,E3,wv); + mel.push({t:t,l:n[2]});t+=n[1];bi++; + }); + t+=q; + } + + // === SECTION 3 (30-50s): Second waltz — contrasting theme === + // More lyrical flowing melody + var waltz2=[ + [E4,q*2,2],[D4,q,1],[C4,q*3,0],[E4,q*2,2],[G4,q,3], + [G4,q*2,3],[F4,q,1],[E4,q*3,2],[D4,q*2,1],[E4,q,2], + [F4,q*2,1],[E4,q,2],[D4,q*3,1],[C4,q*3,0] + ]; + for(var w2=0;w2<2;w2++){ + var wv2=0.38+w2*0.08; + waltz2.forEach(function(n){ + str(t,n[0],n[1]*0.9,wv2); + if(w2>0)brs(t,n[0],n[1]*0.9,wv2*0.4); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:wv2*0.3}); + if(n[1]>=q*2)waltz(t,C3,E3,wv2); mel.push({t:t,l:n[2]});t+=n[1]; }); - t+=0.4; + t+=q; } - // Recap theme 1 with full orchestra - th1.forEach(function(n){ - bg.push({t:t,f:n[0],d:n[1]*0.9,i:'brass',v:0.55});bg.push({t:t,f:n[0],d:n[1]*0.9,i:'strings',v:0.45}); - bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:0.35}); + + // === SECTION 4 (50-65s): Waltz 1 returns — full orchestra === + waltz1.forEach(function(n){ + str(t,n[0],n[1]*0.9,0.52);brs(t,n[0],n[1]*0.9,0.4); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:0.3}); + if(n[1]>=q*2)waltz(t,C3,E3,0.5); mel.push({t:t,l:n[2]});t+=n[1]; }); - t+=0.4; - // Finale waltz chords - for(var c=0;c<4;c++){ - [C4,E4,G4,C5].forEach(function(f){bg.push({t:t,f:f,d:q*2.5,i:'brass',v:0.6});bg.push({t:t,f:f,d:q*2.5,i:'strings',v:0.5});}); + t+=q; + // Faster, more energetic repeat + waltz1.forEach(function(n){ + str(t,n[0],n[1]*0.85,0.55);brs(t,n[0],n[1]*0.85,0.45); + bg.push({t:t,f:n[0],d:n[1]*0.85,i:'choir',v:0.2}); + mel.push({t:t,l:n[2]});t+=n[1]*0.9; + }); + + // === FINALE: Big waltz chords === + t+=q; + for(var c=0;c<6;c++){ + [C4,E4,G4,C5].forEach(function(f){brs(t,f,q*2.5,0.6);str(t,f,q*2.5,0.5);}); + bg.push({t:t,f:C3,d:q*2,i:'timpani',v:0.5}); mel.push({t:t,l:4});t+=q*3; } - [C4,E4,G4,C5].forEach(function(f){bg.push({t:t,f:f,d:2.5,i:'brass',v:0.6});bg.push({t:t,f:f,d:2.5,i:'strings',v:0.5});}); + [C4,E4,G4,C5].forEach(function(f){brs(t,f,2.5,0.65);str(t,f,2.5,0.55);}); bg.push({t:t,f:C3,d:2.0,i:'timpani',v:0.65});mel.push({t:t,l:4}); + return {n:"The Blue Danube",composer:"J. Strauss II",bpm:180,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; })(); @@ -1832,8 +2610,8 @@ const CLASSICAL_PIECES=(function(){ // ── Swan Lake (Theme) ── var swan=(function(){ var bg=[],mel=[],t=0,q=0.55; - var theme=[A4,B4,C5,B4,A4,E4,A4,G4,F4,E4,D4,E4,F4,E4,D4,C4,B3,A3,B3,C4,D4,E4,A4]; - var tLn=[0,1,2,1,0,2,0,3,2,1,0,1,2,1,0,2,1,0,1,2,0,2,0]; + var theme=[B4,Db5,D5,Db5,B4,B4,Db5,D5,E5,D5,Db5,B4,A4,Gb4,B4,A4,G4,Gb4,E4,Gb4,G4,Gb4,B4]; + var tLn=[1,0,0,0,1,1,0,0,0,0,0,1,2,3,1,2,2,3,3,3,2,3,1]; for(var rep=0;rep<3;rep++){ var v=0.25+rep*0.12; var inst=rep===0?'woodwind':rep===1?'strings':'brass'; @@ -1841,17 +2619,17 @@ const CLASSICAL_PIECES=(function(){ bg.push({t:t,f:f,d:q*0.85,i:inst,v:v}); if(rep>0)bg.push({t:t,f:f/2,d:q*0.85,i:'bass',v:v*0.4}); if(rep>1)bg.push({t:t,f:f,d:q*0.85,i:'strings',v:v*0.5}); - if(i%3===0){bg.push({t:t,f:A3,d:q*2,i:'bass',v:v*0.3});} + if(i%3===0){bg.push({t:t,f:B3,d:q*2,i:'bass',v:v*0.3});} mel.push({t:t,l:tLn[i]});t+=q; }); t+=0.5; } for(var c=0;c<3;c++){ - [A3,C4,E4,A4].forEach(function(f){bg.push({t:t,f:f,d:q*2.5,i:'strings',v:0.55});bg.push({t:t,f:f,d:q*2.5,i:'brass',v:0.45});}); + [B3,D4,Gb4,B4].forEach(function(f){bg.push({t:t,f:f,d:q*2.5,i:'strings',v:0.55});bg.push({t:t,f:f,d:q*2.5,i:'brass',v:0.45});}); mel.push({t:t,l:4});t+=q*3; } - [A3,C4,E4,A4].forEach(function(f){bg.push({t:t,f:f,d:2.5,i:'strings',v:0.55});}); - bg.push({t:t,f:A3/2,d:2.0,i:'timpani',v:0.6});mel.push({t:t,l:4}); + [B3,D4,Gb4,B4].forEach(function(f){bg.push({t:t,f:f,d:2.5,i:'strings',v:0.55});}); + bg.push({t:t,f:B3/2,d:2.0,i:'timpani',v:0.6});mel.push({t:t,l:4}); return {n:"Swan Lake (Theme)",composer:"Tchaikovsky",bpm:110,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; })(); @@ -2122,10 +2900,11 @@ const CLASSICAL_PIECES=(function(){ // ── Dance of the Sugar Plum Fairy ── var sugarplum=(function(){ var bg=[],mel=[],t=0,q=0.4; - var theme=[E4,Eb4,E4,B3,E4,Eb4,E4,B3,E4,F4,E4,D4,C4,B3,A3,B3]; - var tLn=[2,1,2,3,2,1,2,3,2,1,2,0,1,3,0,3]; - var ans=[E4,G4,B4,E5,B4,G4,E4,B3]; - var aLn=[2,3,0,2,0,3,2,3]; + // Celesta melody from The Nutcracker — staccato descending/ascending pattern in E minor + var theme=[B4,A4,Ab4,A4,C5,B4,A4,Ab4,E4,Ab4,B4,E5,D5,C5,B4]; + var tLn=[3,0,1,0,2,3,0,1,2,1,3,2,1,0,3]; + var ans=[B4,A4,Ab4,A4,C5,B4,A4]; + var aLn=[3,0,1,0,2,3,0]; for(var rep=0;rep<5;rep++){ var v=0.2+rep*0.08; var inst=rep<2?'woodwind':rep<4?'strings':'brass'; @@ -2142,8 +2921,8 @@ const CLASSICAL_PIECES=(function(){ }); t+=0.4; } - [E4,G4,B4,E5].forEach(function(f){bg.push({t:t,f:f,d:2.0,i:'strings',v:0.5});}); - bg.push({t:t,f:E3,d:1.5,i:'bass',v:0.4});mel.push({t:t,l:4}); + [E3,B3,E4,Ab4,B4].forEach(function(f){bg.push({t:t,f:f,d:2.0,i:'strings',v:0.5});}); + bg.push({t:t,f:E3/2,d:1.5,i:'bass',v:0.4});mel.push({t:t,l:4}); return {n:"Dance of the Sugar Plum Fairy",composer:"Tchaikovsky",bpm:120,duration:Math.ceil(t+2.5),isClassical:true,bg:bg,melody:mel}; })(); @@ -2176,26 +2955,257 @@ const CLASSICAL_PIECES=(function(){ })(); // ── Habanera (Carmen) ── - var habanera=tp("Habanera (Carmen)","Bizet",108, - [D5,Db5,C5,B4,Bb4,A4,Ab4,G4,Gb4,F4,E4,F4,Gb4,G4,Ab4,A4,Bb4,A4,Ab4,G4], - [0,1,2,3,2,1,0,3,2,1,0,1,2,3,0,1,2,1,0,3], - [{d:0.32,v:0.2,i:'strings'},{d:0.30,v:0.28,i:'strings'},{d:0.28,v:0.35,i:'strings'},{d:0.26,v:0.42,i:'brass'},{d:0.24,v:0.48,i:'brass'},{d:0.22,v:0.55,i:'brass'}], - [D4,F4,A4,D5]); + // Bizet's famous aria in D minor, ~80s + // Descending chromatic melody with the habanera rhythm (dotted + sixteenth) + var habanera=(function(){ + var bg=[],mel=[],t=0,q=60/108; + function str(t,f,d,v){bg.push({t:t,f:f,d:d,i:'strings',v:v||0.35});} + function brs(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.35});} + function ww(t,f,d,v){bg.push({t:t,f:f,d:d,i:'woodwind',v:v||0.3});} + + // Harmonic bed + var harm=[ + [0,18,[D3,F3,A3],0.08],[18,36,[D3,F3,A3],0.12],[36,54,[D3,F3,A3],0.16], + [54,68,[Bb3,D4,F4],0.14],[68,84,[D3,F3,A3],0.18] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht0)str(t,n[0],n[1]*0.9,v1*0.5); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + ans1.forEach(function(n){ + ww(t,n[0],n[1]*0.9,v1); + if(s1>0)str(t,n[0],n[1]*0.9,v1*0.5); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + } + + // === SECTION 2 (18-36s): Second verse — strings take melody === + // Same chromatic descent but with richer orchestration + var desc2=[[D5,q*0.65,0],[Db5,q*0.65,1],[C5,q*0.65,2],[B4,q*0.65,3], + [Bb4,q*0.65,2],[A4,q*0.65,1],[Ab4,q*0.65,0],[G4,q*1.3,3]]; + var ans2=[[A4,q*0.5,1],[Bb4,q*0.5,2],[C5,q*0.5,2],[A4,q,1],[F4,q*0.5,3],[D4,q*1.5,0]]; + + for(var s2=0;s2<3;s2++){ + var v2=0.32+s2*0.06; + habBass(t,D3,v2);habBass(t+q*3,A3,v2); + desc2.forEach(function(n){ + str(t,n[0],n[1]*0.9,v2);ww(t,n[0],n[1]*0.9,v2*0.5); + if(s2>0)bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:v2*0.3}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + ans2.forEach(function(n){ + str(t,n[0],n[1]*0.9,v2);ww(t,n[0],n[1]*0.9,v2*0.5); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + bg.push({t:t,f:D3,d:0.2,i:'timpani',v:v2*0.4});mel.push({t:t,l:4});t+=q; + } + + // === SECTION 3 (36-54s): Major key contrast — "L'amour" refrain === + // Shifts to D major — bright, passionate + var refrain=[[D4,q,0],[F4,q*0.5,3],[A4,q*0.5,1],[D5,q*1.5,0], + [C5,q*0.5,2],[Bb4,q*0.5,2],[A4,q,1],[G4,q*0.5,3],[A4,q*0.5,1], + [D4,q*2,0]]; + for(var s3=0;s3<3;s3++){ + var v3=0.4+s3*0.06; + habBass(t,D3,v3);habBass(t+q*3,A3,v3); + refrain.forEach(function(n){ + str(t,n[0],n[1]*0.9,v3);brs(t,n[0],n[1]*0.9,v3*0.5); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:v3*0.35}); + if(s3>1)bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:v3*0.2}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + if(s3>0){bg.push({t:t,f:D3,d:0.3,i:'timpani',v:v3*0.5});mel.push({t:t,l:4});} + t+=q; + } + + // === SECTION 4 (54-68s): Return of chromatic descent — full orchestra === + for(var s4=0;s4<3;s4++){ + var v4=0.5+s4*0.05; + habBass(t,D3,v4);habBass(t+q*3,D3,v4); + desc1.forEach(function(n){ + str(t,n[0],n[1]*0.9,v4);brs(t,n[0],n[1]*0.9,v4*0.6); + ww(t,n[0],n[1]*0.9,v4*0.4); + if(s4>0)bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:v4*0.2}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + ans1.forEach(function(n){ + str(t,n[0],n[1]*0.9,v4);brs(t,n[0],n[1]*0.9,v4*0.6); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + bg.push({t:t,f:D3,d:0.25,i:'timpani',v:v4*0.6});mel.push({t:t,l:4});t+=q; + } + + // === FINALE: Passionate ending === + // Final descent + big D minor chord + desc1.forEach(function(n){ + str(t,n[0],n[1]*0.8,0.6);brs(t,n[0],n[1]*0.8,0.5); + bg.push({t:t,f:n[0],d:n[1]*0.8,i:'choir',v:0.3}); + mel.push({t:t,l:n[2]});t+=n[1]*0.85; + }); + t+=q; + for(var c=0;c<4;c++){ + [D3,A3,D4,F4].forEach(function(f){brs(t,f,0.4,0.6);str(t,f,0.4,0.5);}); + bg.push({t:t,f:D3/2,d:0.4,i:'timpani',v:0.6});mel.push({t:t,l:4});t+=0.5; + } + [D3,A3,D4,F4,A4].forEach(function(f){brs(t,f,3.0,0.6);str(t,f,3.0,0.5);}); + bg.push({t:t,f:D3/2,d:2.5,i:'timpani',v:0.65});mel.push({t:t,l:4}); + + return {n:"Habanera (Carmen)",composer:"Bizet",bpm:108,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; + })(); // ── Spring (Four Seasons) ── - var spring=tp("Spring (Four Seasons)","Vivaldi",120, - [F4,A4,C5,A4,F4,G4,A4,Bb4,C5,D5,C5,Bb4,A4,G4,F4,E4,F4,G4,A4,C5], - [0,1,2,1,0,3,1,2,2,0,2,2,1,3,0,2,0,3,1,2], - [{d:0.24,v:0.22,i:'strings'},{d:0.22,v:0.28,i:'strings'},{d:0.20,v:0.35,i:'strings'},{d:0.18,v:0.42,i:'strings'},{d:0.16,v:0.48,i:'brass'},{d:0.14,v:0.54,i:'brass'},{d:0.12,v:0.6,i:'brass'}], - [F4,A4,C5,F5]); + // Vivaldi's Spring from The Four Seasons in E major, ~75s + // Joyful opening ritornello → birdsong trills → pastoral dance + var spring=(function(){ + var bg=[],mel=[],t=0,q=60/120; + function str(t,f,d,v){bg.push({t:t,f:f,d:d,i:'strings',v:v||0.4});} + function brs(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.35});} + + // Harmonic bed + var harm=[ + [0,14,[E3,G3,B3],0.1],[14,28,[E3,G3,B3],0.14],[28,44,[A3,C4,E4],0.13], + [44,58,[E3,G3,B3],0.16],[58,78,[E3,G3,B3],0.2] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht0)bg.push({t:t,f:n[0],d:n[1]*0.8,i:'woodwind',v:bv*0.4}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q*0.5; + // Gentle bass response + [E3,B3,E4].forEach(function(f){bg.push({t:t,f:f,d:q*1.5,i:'bass',v:bv*0.3});}); + mel.push({t:t,l:4});t+=q*2; + } + + // === SECTION 3 (28-44s): Ritornello returns — fuller === + for(var r2=0;r2<2;r2++){ + var rv2=0.42+r2*0.08; + rit.forEach(function(n){ + str(t,n[0],n[1]*0.85,rv2);brs(t,n[0],n[1]*0.85,rv2*0.4); + bg.push({t:t,f:n[0]/2,d:n[1]*0.85,i:'bass',v:rv2*0.3}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q*0.3; + ritAns.forEach(function(n){ + str(t,n[0],n[1]*0.85,rv2);brs(t,n[0],n[1]*0.85,rv2*0.4); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + } + // Running scales + [E4,Ab4,B4,E5,D5,B4,Ab4,E4,D4,E4,Ab4,B4,D5,E5,Ab5,E5].forEach(function(f,i){ + str(t,f,q*0.35,0.5);mel.push({t:t,l:[2,1,0,2,1,0,1,2,0,2,1,0,1,2,0,2][i]});t+=q*0.4; + }); + t+=q; + + // === SECTION 4 (44-58s): Pastoral dance — lilting 12/8 feel === + var dance=[[E4,q,2],[Ab4,q*0.5,1],[B4,q*0.5,0],[E4,q*0.5,2],[Ab4,q*0.5,1], + [B4,q,0],[E5,q*0.5,2],[D5,q*0.5,1],[B4,q,0],[Ab4,q*0.5,1],[E4,q*1,2]]; + for(var d=0;d<3;d++){ + var dv=0.45+d*0.06; + dance.forEach(function(n){ + str(t,n[0],n[1]*0.85,dv); + if(d>0)brs(t,n[0],n[1]*0.85,dv*0.4); + if(d>1)bg.push({t:t,f:n[0]/2,d:n[1]*0.85,i:'bass',v:dv*0.35}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + } + + // === SECTION 5 (58-72s): Final ritornello — full orchestra === + for(var r3=0;r3<3;r3++){ + var rv3=0.52+r3*0.06; + rit.forEach(function(n){ + str(t,n[0],n[1]*0.85,rv3);brs(t,n[0],n[1]*0.85,rv3*0.5); + bg.push({t:t,f:n[0]/2,d:n[1]*0.85,i:'bass',v:rv3*0.35}); + if(r3>1)bg.push({t:t,f:n[0],d:n[1]*0.85,i:'choir',v:rv3*0.2}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q*0.3; + ritAns.forEach(function(n){ + str(t,n[0],n[1]*0.85,rv3);brs(t,n[0],n[1]*0.85,rv3*0.5); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q*0.5; + } + + // Finale chords + for(var c=0;c<4;c++){ + [E3,B3,E4,Ab4,B4].forEach(function(f){str(t,f,0.4,0.6);brs(t,f,0.4,0.5);}); + mel.push({t:t,l:4});t+=0.5; + } + [E3,B3,E4,Ab4,B4,E5].forEach(function(f){str(t,f,3.0,0.6);brs(t,f,3.0,0.5);}); + bg.push({t:t,f:E3/2,d:2.5,i:'timpani',v:0.55});mel.push({t:t,l:4}); + + return {n:"Spring (Four Seasons)",composer:"Vivaldi",bpm:120,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel}; + })(); // ── Für Elise ── var furelise=(function(){ var bg=[],mel=[],t=0,q=0.35; var motif=[E4,Eb4,E4,Eb4,E4,B3,D4,C4,A3]; var mLn=[2,1,2,1,2,3,0,2,0]; - var ph2=[C4,E4,A4,B4,E4,C5,B4,A4]; - var p2Ln=[1,2,0,3,2,0,3,0]; + var ph2=[C4,E4,A4,B4,E4,Ab4,B4,A4]; + var p2Ln=[1,2,0,3,2,1,3,0]; for(var rep=0;rep<5;rep++){ var v=0.2+rep*0.08; var inst=rep<2?'woodwind':rep<3?'strings':'brass'; @@ -2227,8 +3237,9 @@ const CLASSICAL_PIECES=(function(){ var canon=(function(){ var bg=[],mel=[],t=0,q=0.55; var bassLine=[D3,A3,B3,Gb3,G3,D3,G3,A3]; - var melody2=[A4,Gb4,G4,A4,Gb4,D4,Gb4,G4,A4,B4,G4,A4,Gb4,D4,E4,Gb4]; - var m2Ln=[1,2,3,1,2,0,2,3,1,0,3,1,2,0,1,2]; + // Real Pachelbel violin melody: F#5-E5-D5-C#5-B4-A4-B4-C#5 (var 1) then D5-C#5-B4-A4-G4-F#4-G4-A4 (var 2) + var melody2=[Gb4,E4,D4,Db4,B3,A3,B3,Db4,D4,Db4,B3,A3,G3,Gb3,G3,A3]; + var m2Ln=[2,1,0,1,3,0,3,1,0,1,3,0,3,2,3,0]; for(var rep=0;rep<4;rep++){ var v=0.2+rep*0.08; bassLine.forEach(function(f,i){ @@ -2256,10 +3267,10 @@ const CLASSICAL_PIECES=(function(){ var hungarian=(function(){ var bg=[],mel=[],t=0; function orch(t,f,d,v,i){bg.push({t:t,f:f,d:d,i:i||'strings',v:v||0.4});} - var fast=[A4,G4,A4,E4,A4,G4,A4,E4,F4,E4,D4,C4,B3,A3,B3,C4,D4,E4,F4,E4]; - var fLn=[0,3,0,2,0,3,0,2,1,2,0,1,3,0,3,1,0,2,1,2]; - var slow=[A4,A4,G4,F4,E4,D4,E4,F4,G4,A4]; - var sLn=[0,0,3,1,2,0,2,1,3,0]; + var fast=[A4,A4,A4,A4,Bb4,A4,G4,F4,F4,E4,F4,G4,A4,A4,Bb4,A4,G4,F4,E4,D4]; + var fLn=[0,0,0,0,2,0,3,1,1,2,1,3,0,0,2,0,3,1,2,0]; + var slow=[D4,D4,E4,F4,F4,E4,D4,E4,F4,A4]; + var sLn=[0,0,2,1,1,2,0,2,1,0]; // Fast section 1 [0.20,0.18].forEach(function(qf,qi){ var v=0.35+qi*0.1; @@ -2294,20 +3305,143 @@ const CLASSICAL_PIECES=(function(){ t+=0.3; }); for(var c=0;c<4;c++){ - [A3,C4,E4,A4].forEach(function(f){orch(t,f,0.35,0.65,'brass');}); - bg.push({t:t,f:A3/2,d:0.35,i:'timpani',v:0.65});mel.push({t:t,l:4});t+=0.45; + [D3,A3,D4,F4].forEach(function(f){orch(t,f,0.35,0.65,'brass');}); + bg.push({t:t,f:D3/2,d:0.35,i:'timpani',v:0.65});mel.push({t:t,l:4});t+=0.45; } - [A3,C4,E4,A4].forEach(function(f){orch(t,f,2.0,0.6,'brass');orch(t,f,2.0,0.5);}); - bg.push({t:t,f:A3/2,d:1.5,i:'timpani',v:0.7});mel.push({t:t,l:4}); + [D3,A3,D4,F4,A4].forEach(function(f){orch(t,f,2.0,0.6,'brass');orch(t,f,2.0,0.5);}); + bg.push({t:t,f:D3/2,d:1.5,i:'timpani',v:0.7});mel.push({t:t,l:4}); return {n:"Hungarian Dance No. 5",composer:"Brahms",bpm:140,duration:Math.ceil(t+2.5),isClassical:true,bg:bg,melody:mel}; })(); // ── Ode to Joy ── - var odeToJoy=tp("Ode to Joy","Beethoven",100, - [E4,E4,F4,G4,G4,F4,E4,D4,C4,C4,D4,E4,E4,D4,D4,C4,C4,D4,E4,D4,C4,C4], - [2,2,1,3,3,1,2,0,0,0,1,2,2,0,0,0,0,1,2,0,0,0], - [{d:0.42,v:0.18,i:'woodwind'},{d:0.40,v:0.25,i:'strings'},{d:0.38,v:0.32,i:'strings'},{d:0.36,v:0.4,i:'brass'},{d:0.34,v:0.48,i:'brass'}], - [C4,E4,G4,C5]); + // Beethoven's 9th Symphony finale in D major, ~85s + // The most famous melody in classical music, builds from solo to full chorus + var odeToJoy=(function(){ + var bg=[],mel=[],t=0,q=60/100; + function str(t,f,d,v){bg.push({t:t,f:f,d:d,i:'strings',v:v||0.4});} + function brs(t,f,d,v){bg.push({t:t,f:f,d:d,i:'brass',v:v||0.4});} + function ww(t,f,d,v){bg.push({t:t,f:f,d:d,i:'woodwind',v:v||0.3});} + + // Harmonic bed + var harm=[ + [0,16,[D3,A3,D4],0.08],[16,32,[D3,A3,D4],0.12],[32,48,[D3,A3,D4],0.16], + [48,64,[G3,B3,D4],0.15],[64,88,[D3,A3,D4],0.2] + ]; + harm.forEach(function(h){ + for(var ht=h[0];ht0)bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:bv*0.25}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + bg.push({t:t,f:D3,d:0.3,i:'timpani',v:bv*0.5});mel.push({t:t,l:4});t+=q; + } + + // === SECTION 5 (64-80s): Grand finale — full orchestra + choir === + // "Freude, schöner Götterfunken" at full power + melA.forEach(function(n){ + str(t,n[0],n[1]*0.9,0.55);brs(t,n[0],n[1]*0.9,0.45); + ww(t,n[0],n[1]*0.9,0.3); + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:0.35}); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:0.3}); + if(n[2]===1||n[2]===0)bg.push({t:t,f:D3,d:0.15,i:'timpani',v:0.35}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + melB.forEach(function(n){ + str(t,n[0],n[1]*0.9,0.58);brs(t,n[0],n[1]*0.9,0.48); + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:0.38}); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:0.3}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + t+=q; + + // Final triumphant repeat of A + melA.forEach(function(n){ + str(t,n[0],n[1]*0.9,0.6);brs(t,n[0],n[1]*0.9,0.5); + bg.push({t:t,f:n[0],d:n[1]*0.9,i:'choir',v:0.4}); + bg.push({t:t,f:n[0]/2,d:n[1]*0.9,i:'bass',v:0.35}); + mel.push({t:t,l:n[2]});t+=n[1]; + }); + + // === CODA: Big D major chords === + t+=q; + for(var c=0;c<6;c++){ + [D3,A3,D4,Gb4,A4].forEach(function(f){brs(t,f,0.45,0.65);str(t,f,0.45,0.55);}); + bg.push({t:t,f:D3/2,d:0.45,i:'timpani',v:0.6}); + bg.push({t:t,f:D4,d:0.45,i:'choir',v:0.4}); + mel.push({t:t,l:4});t+=0.55; + } + [D3,A3,D4,Gb4,A4,D5].forEach(function(f){ + brs(t,f,4.0,0.7);str(t,f,4.0,0.6);bg.push({t:t,f:f,d:4.0,i:'choir',v:0.4}); + }); + bg.push({t:t,f:D3/2,d:3.0,i:'timpani',v:0.7});mel.push({t:t,l:4}); + + return {n:"Ode to Joy",composer:"Beethoven",bpm:100,duration:Math.ceil(t+4),isClassical:true,bg:bg,melody:mel}; + })(); // ── William Tell Overture (Storm) ── var tellStorm=(function(){ @@ -2372,7 +3506,7 @@ const VIDEOGAME_PIECES=(function(){ // ── Turkish March (Mozart) ── var turkish=(function(){ - var bg=[],mel=[],t=0,q=0.18; + var bg=[],mel=[],t=0,q=0.227; var theme=[B3,A3,Ab3,A3,C4,D4,C4,B3,A3,B3,C4,D4,E4,D4,C4,B3,A3,B3,A3,A3]; var tLn= [3,0,1,0,2,1,2,3,0,3,0,1,2,1,0,3,0,3,0,0]; for(var rep=0;rep<6;rep++){ @@ -2434,7 +3568,7 @@ const VIDEOGAME_PIECES=(function(){ // ── Can-Can (Offenbach) ── var cancan=(function(){ - var bg=[],mel=[],t=0,q=0.16; + var bg=[],mel=[],t=0,q=0.197; var theme=[C4,D4,E4,C4,E4,C4,E4,D4,E4,F4,E4,D4,C4,D4,E4,F4,G4,A4,G4,E4,C4,D4,E4,C4]; var tLn= [0,1,2,0,2,0,2,1,2,3,2,1,0,1,2,3,0,1,0,2,0,1,2,0]; for(var rep=0;rep<6;rep++){ @@ -2557,73 +3691,6 @@ const CHIPTUNE_PIECES=(function(){ return [platformer,spaceshooter,rpg,racing,dungeon,victory]; })(); -// ── PRIME (easy beginner songs, verified from lead sheets) ── -const PRIME_PIECES=(function(){ - var C4=NT.C4,D4=NT.D4,E4=NT.E4,F4=NT.F4,G4=NT.G4,A4=NT.A4,Bb4=NT.Bb4,B4=NT.B4, - C5=NT.C5,D5=NT.D5,E5=NT.E5; - function primer(name,origin,bpm,theme,lanes,durations,passes,root){ - var bg=[],mel=[],t=0,q=0.25; - for(var rep=0;rep1)bg.push({t:t,f:f/2,d:d*0.85,i:'bass',v:v*0.3}); - mel.push({t:t,l:lanes[i]});t+=d; - }); - t+=0.4; - } - var r=root||theme[0]; - [r,r*5/4,r*3/2,r*2].forEach(function(f){bg.push({t:t,f:f,d:2.0,i:'strings',v:0.45});}); - bg.push({t:t,f:r/2,d:1.5,i:'timpani',v:0.5});mel.push({t:t,l:4}); - return {n:name,composer:origin,bpm:bpm,duration:Math.ceil(t+2.5),isClassical:true,bg:bg,melody:mel}; - } - - // ── Twinkle Twinkle Little Star (C major, from lead sheet) ── - var twinkle=primer("Twinkle Twinkle Little Star","Traditional (1760s)",100, - [C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4,G4,G4,F4,F4,E4,E4,D4,G4,G4,F4,F4,E4,E4,D4,C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4], - [0,0,3,3,0,0,3,1,1,2,2,1,1,0,3,3,1,1,2,2,1,3,3,1,1,2,2,1,0,0,3,3,0,0,3,1,1,2,2,1,1,0], - [1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,3], - 3,C4); - - // ── Mary Had a Little Lamb (C major, from lead sheet) ── - var mary=primer("Mary Had a Little Lamb","S.J. Hale (1830)",110, - [E4,D4,C4,D4,E4,E4,E4,D4,D4,D4,E4,G4,G4,E4,D4,C4,D4,E4,E4,E4,E4,D4,D4,E4,D4,C4], - [2,1,0,1,2,2,2,1,1,1,2,3,3,2,1,0,1,2,2,2,2,1,1,2,1,0], - [1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,3], - 4,C4); - - // ── Happy Birthday (C major, from lead sheet in D transposed) ── - var birthday=primer("Happy Birthday","P.S. Hill (1893)",100, - [C4,C4,D4,C4,F4,E4,C4,C4,D4,C4,G4,F4,C4,C4,C5,A4,F4,E4,D4,Bb4,Bb4,A4,F4,G4,F4], - [0,0,1,0,1,2,0,0,1,0,3,1,0,0,0,0,1,2,1,2,2,0,1,3,1], - [1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,3], - 4,C4); - - // ── Chopsticks (C major, from lead sheet — alternating dyad notes) ── - var chopsticks=primer("Chopsticks","Euphemia Allen (1877)",140, - [F4,G4,F4,G4,F4,G4,E4,G4,E4,G4,E4,G4,D4,F4,D4,F4,D4,F4,C4,E4,C4,E4,C4,E4,F4,G4,F4,G4,F4,G4,E4,G4,E4,G4,E4,G4,D4,F4,D4,F4,D4,F4,C4,E4,C4,E4,C4,E4], - [1,3,1,3,1,3,2,3,2,3,2,3,1,1,1,1,1,1,0,2,0,2,0,2,1,3,1,3,1,3,2,3,2,3,2,3,1,1,1,1,1,1,0,2,0,2,0,2], - [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3], - 3,C4); - - // ── Lavender's Blue (C major, from lead sheet in D transposed) ── - var lavender=primer("Lavender's Blue","English Traditional (1670s)",110, - [E4,E4,E4,D4,E4,F4,G4,G4,G4,G4,A4,G4,F4,F4,F4,E4,D4,E4,F4,E4,E4,E4,D4,E4,F4,G4,G4,G4,A4,G4,F4,E4], - [2,2,2,1,2,1,3,3,3,3,0,3,1,1,1,2,1,2,1,2,2,2,1,2,1,3,3,3,0,3,1,2], - [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,3], - 4,C4); - - // ── Shortnin' Bread (C major, from lead sheet in A transposed) ── - var shortnin=primer("Shortnin' Bread","Traditional (1900s)",130, - [E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,A4,G4,E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,C5], - [2,2,1,0,1,0,0,3,0,3,0,3,2,2,1,0,1,0,0,3,0,3,0], - [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3], - 4,C4); - - return [twinkle,mary,birthday,chopsticks,lavender,shortnin]; -})(); // ── FOLK (public domain traditional songs) ── const FOLK_PIECES=(function(){ @@ -2633,7 +3700,7 @@ const FOLK_PIECES=(function(){ // Folk piece helper function folk(name,origin,bpm,theme,lanes,durations,passes,root){ - var bg=[],mel=[],t=0,q=0.25; + var bg=[],mel=[],t=0,q=30/bpm; for(var rep=0;rep0)bg.push({t:t,f:f/2,d:d*0.85,i:'bass',v:v*0.25}); + mel.push({t:t,l:lanes[i]});t+=d; + }); + t+=0.5; + } + var r=root||theme[0]; + [r,r*5/4,r*3/2,r*2].forEach(function(f){bg.push({t:t,f:f,d:2.0,i:'strings',v:0.4});}); + mel.push({t:t,l:4}); + return {n:name,composer:origin,bpm:bpm,duration:Math.ceil(t+2.5),isClassical:true,bg:bg,melody:mel}; + } + // ── Twinkle Twinkle Little Star (same melody as Baa Baa Black Sheep) ── + var twinkle=rhyme("Twinkle Twinkle Little Star","Traditional (1760s)",75, + [C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4,G4,G4,F4,F4,E4,E4,D4,C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4], + [0,0,3,3,0,0,3,1,1,2,2,1,1,0,3,3,1,1,2,2,1,0,0,3,3,0,0,3,1,1,2,2,1,1,0], + [2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,6], + 3,C4); + // ── Mary Had a Little Lamb ── + var mary=rhyme("Mary Had a Little Lamb","S.J. Hale (1830)",80, + [E4,D4,C4,D4,E4,E4,E4,D4,D4,D4,E4,G4,G4,E4,D4,C4,D4,E4,E4,E4,D4,D4,E4,D4,C4], + [2,1,0,1,2,2,2,1,1,1,2,3,3,2,1,0,1,2,2,2,1,1,2,1,0], + [2,2,2,2,2,2,4,2,2,4,2,2,4,2,2,2,2,2,2,2,2,2,2,2,6], + 3,C4); + // ── Happy Birthday ── + var birthday=rhyme("Happy Birthday","P.S. Hill (1893)",75, + [C4,C4,D4,C4,F4,E4,C4,C4,D4,C4,G4,F4,C4,C4,C5,A4,F4,E4,D4,Bb4,Bb4,A4,F4,G4,F4], + [0,0,1,0,1,2,0,0,1,0,3,1,0,0,0,0,1,2,1,2,2,0,1,3,1], + [1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,6], + 3,C4); + // ── Chopsticks ── + var chopsticks=rhyme("Chopsticks","Euphemia Allen (1877)",95, + [F4,G4,F4,G4,F4,G4,E4,G4,E4,G4,E4,G4,D4,F4,D4,F4,C4,E4,C4,E4,F4,G4,F4,G4,E4,G4,E4,G4,D4,F4,D4,F4,C4,E4,C4,E4], + [1,3,1,3,1,3,2,3,2,3,2,3,1,1,1,1,0,2,0,2,1,3,1,3,2,3,2,3,1,1,1,1,0,2,0,2], + [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8], + 3,C4); + // ── Lavender's Blue ── + var lavender=rhyme("Lavender's Blue","English Traditional (1670s)",80, + [E4,E4,D4,E4,F4,G4,G4,A4,G4,F4,F4,E4,D4,E4,E4,E4,D4,E4,F4,G4,G4,A4,G4,F4,E4], + [2,2,1,2,1,3,3,0,3,1,1,2,1,2,2,2,1,2,1,3,3,0,3,1,2], + [2,2,2,2,2,2,2,2,2,4,2,2,2,4,2,2,2,2,2,2,2,2,2,2,6], + 3,C4); + // ── Shortnin' Bread ── + var shortnin=rhyme("Shortnin' Bread","Traditional (1900s)",95, + [E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,A4,G4,E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,C5], + [2,2,1,0,1,0,0,3,0,3,0,3,2,2,1,0,1,0,0,3,0,3,0], + [2,2,2,2,2,2,4,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,8], + 3,C4); + // ── London Bridge ── + var london=rhyme("London Bridge Is Falling Down","English (1744)",75, + [G4,A4,G4,F4,E4,F4,G4,D4,E4,F4,E4,F4,G4,G4,A4,G4,F4,E4,F4,G4,D4,G4,E4,C4], + [3,0,3,1,2,1,3,1,2,1,2,1,3,3,0,3,1,2,1,3,1,3,2,0], + [2,2,2,2,2,2,4,2,2,4,2,2,4,2,2,2,2,2,2,4,4,2,2,6], + 3,C4); + // ── Old MacDonald ── + var macdonald=rhyme("Old MacDonald Had a Farm","English (1706)",80, + [C4,C4,C4,G4,A4,A4,G4,E4,E4,D4,D4,C4,G4,C4,C4,C4,G4,A4,A4,G4,E4,E4,D4,D4,C4], + [0,0,0,3,0,0,3,2,2,1,1,0,3,0,0,0,3,0,0,3,2,2,1,1,0], + [2,2,2,2,2,2,4,2,2,2,2,4,4,2,2,2,2,2,2,4,2,2,2,2,6], + 3,C4); + // ── Row Row Row Your Boat ── + var row=rhyme("Row Row Row Your Boat","English (1852)",70, + [C4,C4,C4,D4,E4,E4,D4,E4,F4,G4,C5,C5,C5,G4,G4,G4,E4,E4,E4,C4,C4,C4,G4,F4,E4,D4,C4], + [0,0,0,1,2,2,1,2,1,3,0,0,0,3,3,3,2,2,2,0,0,0,3,1,2,1,0], + [2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6], + 3,C4); + // ── Three Blind Mice ── + var mice=rhyme("Three Blind Mice","English (1609)",75, + [E4,D4,C4,E4,D4,C4,G4,F4,E4,G4,F4,E4,G4,A4,G4,F4,E4,D4,G4,A4,G4,F4,E4,D4,C4], + [2,1,0,2,1,0,3,1,2,3,1,2,3,0,3,1,2,1,3,0,3,1,2,1,0], + [2,2,4,2,2,4,2,2,4,2,2,4,2,2,2,2,2,4,2,2,2,2,2,2,6], + 3,C4); + // ── Itsy Bitsy Spider ── + var spider=rhyme("Itsy Bitsy Spider","English (1910s)",75, + [G4,C5,C5,C5,D5,E5,E5,D5,C5,D5,E5,C5,E5,E5,D5,D5,C5,G4,C5,C5,C5,D5,E5,E5,D5,C5,D5,E5,C5], + [3,0,0,0,1,2,2,1,0,1,2,0,2,2,1,1,0,3,0,0,0,1,2,2,1,0,1,2,0], + [2,2,2,2,2,4,2,2,2,2,2,4,2,2,2,2,4,2,2,2,2,2,4,2,2,2,2,2,6], + 3,C4); + // ── Pop Goes the Weasel ── + var weasel=rhyme("Pop Goes the Weasel","English (1850s)",85, + [C4,E4,E4,F4,G4,G4,C4,E4,E4,D4,F4,A4,A4,G4,C4,E4,E4,F4,G4,G4,E4,C4,D4,F4,E4,C4], + [0,2,2,1,3,3,0,2,2,1,1,0,0,3,0,2,2,1,3,3,2,0,1,1,2,0], + [2,2,2,2,2,4,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,6], + 3,C4); + // ── Hot Cross Buns ── + var hotcross=rhyme("Hot Cross Buns","English (1798)",65, + [E4,D4,C4,E4,D4,C4,C4,C4,C4,C4,D4,D4,D4,D4,E4,D4,C4], + [2,1,0,2,1,0,0,0,0,0,1,1,1,1,2,1,0], + [2,2,4,2,2,4,2,2,2,2,2,2,2,2,2,2,6], + 4,C4); + // ── Jack and Jill ── + var jack=rhyme("Jack and Jill","English (1765)",80, + [C4,C4,D4,E4,E4,F4,G4,G4,F4,E4,F4,G4,A4,A4,G4,F4,E4,D4,C4], + [0,0,1,2,2,1,3,3,1,2,1,3,0,0,3,1,2,1,0], + [2,2,2,2,2,2,2,4,2,2,2,2,2,4,2,2,2,2,6], + 3,C4); + // ── Humpty Dumpty ── + var humpty=rhyme("Humpty Dumpty","English (1797)",75, + [E4,G4,A4,G4,F4,E4,D4,E4,F4,E4,D4,C4,E4,G4,A4,G4,F4,E4,D4,C4], + [2,3,0,3,1,2,1,2,1,2,1,0,2,3,0,3,1,2,1,0], + [2,2,4,2,2,2,4,2,2,2,2,4,2,2,4,2,2,2,2,6], + 3,C4); + // ── Baa Baa Black Sheep (same melody as Twinkle Twinkle) ── + var baa=rhyme("Baa Baa Black Sheep","English (1731)",80, + [C4,C4,G4,G4,A4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4,G4,G4,G4,F4,F4,F4,E4,E4,E4,D4,D4,D4,C4], + [0,0,3,3,0,0,0,3,1,1,2,2,1,1,0,3,3,3,1,1,1,2,2,2,1,1,1,0], + [2,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,6], + 3,C4); + // ── Classics (from Prime, simple versions) ── + var twinkle=rhyme("Twinkle Twinkle Little Star","Traditional (1760s)",75, + [C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4,G4,G4,F4,F4,E4,E4,D4,C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4], + [0,0,3,3,0,0,3,1,1,2,2,1,1,0,3,3,1,1,2,2,1,0,0,3,3,0,0,3,1,1,2,2,1,1,0], + [2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,6], + 3,C4); + var mary=rhyme("Mary Had a Little Lamb","S.J. Hale (1830)",80, + [E4,D4,C4,D4,E4,E4,E4,D4,D4,D4,E4,G4,G4,E4,D4,C4,D4,E4,E4,E4,D4,D4,E4,D4,C4], + [2,1,0,1,2,2,2,1,1,1,2,3,3,2,1,0,1,2,2,2,1,1,2,1,0], + [2,2,2,2,2,2,4,2,2,4,2,2,4,2,2,2,2,2,2,2,2,2,2,2,6], + 3,C4); + var birthday=rhyme("Happy Birthday","P.S. Hill (1893)",75, + [C4,C4,D4,C4,F4,E4,C4,C4,D4,C4,G4,F4,C4,C4,C5,A4,F4,E4,D4,Bb4,Bb4,A4,F4,G4,F4], + [0,0,1,0,1,2,0,0,1,0,3,1,0,0,0,0,1,2,1,2,2,0,1,3,1], + [1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,6], + 3,C4); + var chopsticks=rhyme("Chopsticks","Euphemia Allen (1877)",95, + [F4,G4,F4,G4,F4,G4,E4,G4,E4,G4,E4,G4,D4,F4,D4,F4,C4,E4,C4,E4,F4,G4,F4,G4,E4,G4,E4,G4,D4,F4,D4,F4,C4,E4,C4,E4], + [1,3,1,3,1,3,2,3,2,3,2,3,1,1,1,1,0,2,0,2,1,3,1,3,2,3,2,3,1,1,1,1,0,2,0,2], + [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8], + 3,C4); + var lavender=rhyme("Lavender's Blue","English Traditional (1670s)",80, + [E4,E4,D4,E4,F4,G4,G4,A4,G4,F4,F4,E4,D4,E4,E4,E4,D4,E4,F4,G4,G4,A4,G4,F4,E4], + [2,2,1,2,1,3,3,0,3,1,1,2,1,2,2,2,1,2,1,3,3,0,3,1,2], + [2,2,2,2,2,2,2,2,2,4,2,2,2,4,2,2,2,2,2,2,2,2,2,2,6], + 3,C4); + var shortnin=rhyme("Shortnin' Bread","Traditional (1900s)",95, + [E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,A4,G4,E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,C5], + [2,2,1,0,1,0,0,3,0,3,0,3,2,2,1,0,1,0,0,3,0,3,0], + [2,2,2,2,2,2,4,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,8], + 3,C4); + return [baa,london,macdonald,row,mice,spider,weasel,hotcross,jack,humpty,twinkle,mary,birthday,chopsticks,lavender,shortnin]; +})(); +// ── RAGTIME (Scott Joplin & contemporaries, all public domain) ── +const RAGTIME_PIECES=(function(){ + var C3=NT.C3,D3=NT.D3,E3=NT.E3,F3=NT.F3,G3=NT.G3,A3=NT.A3,Bb3=NT.Bb3,B3=NT.B3, + C4=NT.C4,D4=NT.D4,Eb4=NT.Eb4,E4=NT.E4,F4=NT.F4,G4=NT.G4,Ab4=NT.Ab4,A4=NT.A4,Bb4=NT.Bb4,B4=NT.B4, + C5=NT.C5,D5=NT.D5,Eb5=NT.Eb5,E5=NT.E5,F5=NT.F5,G5=NT.G5; + function rag(name,composer,bpm,theme,lanes,durations,passes,root){ + var bg=[],mel=[],t=0,q=30/bpm; + for(var rep=0;rep=minGap){ + result.push(sorted[i]); + } + } + return result; +} function buildClassicalNotes(piece){ // Check for saved melody edits var saved=edLoadSaved(piece.n); @@ -3139,6 +4544,7 @@ function buildClassicalNotes(piece){ return{time:m.t/gameSpeed,lane:m.l,freq:freq,hit:false,missed:false}; }) .sort(function(a,b){return a.time-b.time;}); + return simplifyNotes(raw); } function beginClassical(){ @@ -3163,9 +4569,9 @@ let gameAc=null,mp3Buffer=null,mp3Src=null; let notes=[],gameStartTime=null,gameEndTime=null,playing=false; let gamePlayers=[],activePIdx=0; let cScore=0,cStreak=0,cTotal=0,cGood=0,cMaxStreak=0; -let laneFlash=[0,0,0,0,0],msgTmr=null,prevBtns={},gameSynthNodes=[],classicalHitMode='orchestra'; +let laneFlash=[0,0,0,0,0,0,0,0],msgTmr=null,prevBtns={},gameSynthNodes=[],classicalHitMode='orchestra'; let paused=false,pauseTime=0; -var gpMap=JSON.parse(localStorage.getItem("drgameGpMap")||"null")||{0:2,1:3,2:0,3:1,4:4,8:4}; +var gpMap=JSON.parse(localStorage.getItem("drgameGpMap")||"null")||{0:2,1:3,2:0,3:1,4:4,5:5,6:6,7:7,8:4}; var remapping=false,remapStep=0,remapResult={}; var _savedSettings=JSON.parse(localStorage.getItem("drgameSettings")||"{}"); var gameSpeed=_savedSettings.speed||1.0,masterVolume=_savedSettings.volume||1.0; @@ -3198,12 +4604,19 @@ function buildPadToggles(){ const b=document.createElement("button"); b.className="ptog"+(activePads[i]?" on":""); b.style.borderColor=lane.color;b.style.color=lane.color; - b.textContent=lane.label+(i===4?" (Kick)":""); + b.textContent=lane.label; b.onclick=()=>{activePads[i]=!activePads[i];buildPadToggles();}; el.appendChild(b); }); } buildPadToggles(); +function setSimpleMode(on){ + simpleMode=on; + var full=document.getElementById("density-full"),simple=document.getElementById("density-simple"); + if(full){full.className="smbtn"+(on?"":" purple");} + if(simple){simple.className="smbtn"+(on?" purple":"");} +} +setSimpleMode(false); function saveSettings(){localStorage.setItem("drgameSettings",JSON.stringify({speed:gameSpeed,volume:masterVolume}));} function syncSliders(){ var sv=Math.round(gameSpeed*100),vv=Math.round(masterVolume*100); @@ -3223,8 +4636,9 @@ function confirmReset(){ if(ans===null)return; if(parseInt(ans)===a+b){ localStorage.removeItem("drgame5");localStorage.removeItem("drgameSettings"); - localStorage.removeItem("drgameGpMap");localStorage.removeItem("drgameHidden");localStorage.removeItem("drgameHiddenSongs"); - savedScores=[];hiddenGenres=[];hiddenSongs={};gpMap={0:2,1:3,2:0,3:1,4:4,8:4}; + localStorage.removeItem("drgameGpMap");localStorage.removeItem("drgameKeyMap");localStorage.removeItem("drgameHidden");localStorage.removeItem("drgameHiddenSongs"); + savedScores=[];hiddenGenres=[];hiddenSongs={};gpMap={0:2,1:3,2:0,3:1,4:4,5:5,6:6,7:7,8:4};customKeyMap=null; + LANES[0].key="f";LANES[1].key="g";LANES[2].key="h";LANES[3].key="j";LANES[4].key=" ";LANES[5].key="d";LANES[6].key="k";LANES[7].key="l"; refreshMiniLB();resetSettings();buildMenu(); alert("All data cleared!"); } else {alert("Incorrect — data NOT cleared.");} @@ -3247,7 +4661,7 @@ function updateHitModeVisibility(){ // ── MENU ─────────────────────────────────────────────── function buildMenu(){ const gt=document.getElementById("gtabs");gt.innerHTML=""; - var synthIcons={"Singalong":"\uD83C\uDFB5","Christmas":"\uD83C\uDF84","Folk":"\uD83C\uDFB6","Spirituals":"\uD83D\uDE4F","World":"\uD83C\uDF0D","Classical":"\uD83C\uDFBB","Video Games":"\uD83C\uDFAE","Chiptune Originals":"\uD83D\uDC7E"}; + var synthIcons={"Nursery Rhymes":"\uD83E\uDDD2","Singalong":"\uD83C\uDFB5","Christmas":"\uD83C\uDF84","Folk":"\uD83C\uDFB6","Spirituals":"\uD83D\uDE4F","World":"\uD83C\uDF0D","Ragtime":"\uD83C\uDFB9","Classical":"\uD83C\uDFBB","Video Games":"\uD83C\uDFAE","Chiptune Originals":"\uD83D\uDC7E"}; var allGenres=Object.keys(SYNTH_GENRES).concat(Object.keys(GENRES)); var anyHidden=hiddenGenres.length>0; allGenres.forEach(function(g){ @@ -3852,7 +5266,8 @@ function buildNotes(r){ for(const p of pattern) if(activePads[p.l]) res.push({time:(bar*4+p.t)*bs,lane:p.l,hit:false,missed:false}); - return res.sort((a,b)=>a.time-b.time); + var sorted=res.sort((a,b)=>a.time-b.time); + return simplifyNotes(sorted); } function countdown(cb){ @@ -3965,34 +5380,35 @@ function draw(){ if(!W||!H)return; cx.clearRect(0,0,W,H); - // Active pad lanes (only those toggled on, excluding kick) - const activeLanes=LANES.slice(0,4).map((l,i)=>i).filter(i=>activePads[i]); + // Pad lanes (everything except kick) in columns; kick centered at bottom + const padLanes=LANES.map((l,i)=>i).filter(i=>i!==4&&activePads[i]); const hasKick=activePads[4]; const PAD_H=hasKick?Math.floor(H*0.78):H; const KICK_H=H-PAD_H; - const nLanes=activeLanes.length; - const PAD_W=nLanes>0?W/nLanes:W; + const nLanes=padLanes.length; + const LANE_W=nLanes>0?W/nLanes:W; const HIT_Y=Math.floor(PAD_H*0.76); const KICK_HIT_Y=PAD_H+Math.floor(KICK_H*0.55); const now=(playing&&gameStartTime!=null)?getAc().currentTime-gameStartTime:-9999; // Lane positions map: lane index -> x center const laneX={}; - activeLanes.forEach((li,col)=>{laneX[li]=col*PAD_W+PAD_W/2;}); + padLanes.forEach((li,col)=>{laneX[li]=col*LANE_W+LANE_W/2;}); // Draw pad lanes - activeLanes.forEach((li,col)=>{ - const x=col*PAD_W; + padLanes.forEach((li,col)=>{ + const x=col*LANE_W; cx.fillStyle=laneFlash[li]?LANES[li].color+"33":"#0d0d16"; - cx.fillRect(x,0,PAD_W,PAD_H); + cx.fillRect(x,0,LANE_W,PAD_H); if(col>0){cx.strokeStyle="#1e1e2e";cx.lineWidth=1;cx.beginPath();cx.moveTo(x,0);cx.lineTo(x,PAD_H);cx.stroke();} cx.fillStyle=LANES[li].color;cx.font="bold 12px sans-serif";cx.textAlign="center"; - cx.fillText(LANES[li].label,x+PAD_W/2,PAD_H-20); + cx.fillText(LANES[li].label,x+LANE_W/2,PAD_H-20); cx.fillStyle="#999";cx.font="10px sans-serif"; - cx.fillText(LANES[li].key.toUpperCase(),x+PAD_W/2,PAD_H-7); + var keyLabel=LANES[li].key===" "?"SPACE":LANES[li].key.toUpperCase(); + cx.fillText(keyLabel,x+LANE_W/2,PAD_H-7); }); - // Kick zone + // Kick zone — centered at bottom, notes fall from top of screen if(hasKick){ cx.fillStyle=laneFlash[4]?LANES[4].color+"33":"#0a0a12"; cx.fillRect(0,PAD_H,W,KICK_H); @@ -4005,7 +5421,7 @@ function draw(){ if(nLanes===0&&!hasKick)return; - // Hit line + // Pad hit line if(nLanes>0){ cx.strokeStyle="rgba(255,255,255,0.5)";cx.lineWidth=2; cx.beginPath();cx.moveTo(0,HIT_Y);cx.lineTo(W,HIT_Y);cx.stroke(); @@ -4019,9 +5435,9 @@ function draw(){ cx.beginPath();cx.moveTo(W*0.15,KICK_HIT_Y);cx.lineTo(W*0.85,KICK_HIT_Y);cx.stroke(); } - // Target rings — pads - activeLanes.forEach(li=>{ - const x=laneX[li],r=Math.min(PAD_W*0.33,26); + // Target rings — pad lanes + padLanes.forEach(li=>{ + const x=laneX[li],r=Math.min(LANE_W*0.33,26); cx.beginPath();cx.arc(x,HIT_Y,r,0,Math.PI*2); cx.strokeStyle=laneFlash[li]?LANES[li].color:LANES[li].color+"55"; cx.lineWidth=laneFlash[li]?3:2;cx.stroke(); @@ -4041,30 +5457,16 @@ function draw(){ if(notes.length===0||notes.every(n=>n.hit||n.missed))endTurn(); } - // Notes + // Notes — pad lanes fall in columns, kick falls centered from top if(mode==="builtin"&&now>-9000){ for(const n of notes){ if(n.hit)continue; const dt=n.time-now; - if(n.lane<4){ - if(!laneX.hasOwnProperty(n.lane))continue; - const ny=HIT_Y-dt*SPEED; - if(ny<-40||ny>PAD_H+40){ - if(!n.missed&&dt<-HIT_WIN){n.missed=true;if(cStreak>0){cStreak=0;updateHud();}} - continue; - } - const x=laneX[n.lane],r=Math.min(PAD_W*0.33,26); - cx.globalAlpha=n.missed?0.2:1; - const g=cx.createRadialGradient(x,ny,0,x,ny,r*2); - g.addColorStop(0,LANES[n.lane].color+"aa");g.addColorStop(1,LANES[n.lane].color+"00"); - cx.fillStyle=g;cx.beginPath();cx.arc(x,ny,r*2,0,Math.PI*2);cx.fill(); - cx.fillStyle=LANES[n.lane].color;cx.beginPath();cx.arc(x,ny,r,0,Math.PI*2);cx.fill(); - cx.strokeStyle="#fff";cx.lineWidth=2;cx.beginPath();cx.arc(x,ny,r,0,Math.PI*2);cx.stroke(); - cx.globalAlpha=1; - if(!n.missed&&dt<-HIT_WIN){n.missed=true;if(cStreak>0){cStreak=0;updateHud();}} - } else if(hasKick){ - const ky=KICK_HIT_Y-dt*SPEED*0.5; - if(kyH+30){ + if(n.lane===4){ + // Kick — falls from top of screen, centered, landing on KICK_HIT_Y + if(!hasKick)continue; + const ky=KICK_HIT_Y-dt*SPEED; + if(ky<-40||ky>H+40){ if(!n.missed&&dt<-HIT_WIN){n.missed=true;if(cStreak>0){cStreak=0;updateHud();}} continue; } @@ -4074,6 +5476,23 @@ function draw(){ cx.strokeStyle="#fff";cx.lineWidth=2;cx.beginPath();cx.arc(W/2,ky,kr,0,Math.PI*2);cx.stroke(); cx.globalAlpha=1; if(!n.missed&&dt<-HIT_WIN){n.missed=true;if(cStreak>0){cStreak=0;updateHud();}} + } else { + // Pad lanes — fall in columns + if(!laneX.hasOwnProperty(n.lane))continue; + const ny=HIT_Y-dt*SPEED; + if(ny<-40||ny>PAD_H+40){ + if(!n.missed&&dt<-HIT_WIN){n.missed=true;if(cStreak>0){cStreak=0;updateHud();}} + continue; + } + const x=laneX[n.lane],r=Math.min(LANE_W*0.33,26); + cx.globalAlpha=n.missed?0.2:1; + const g=cx.createRadialGradient(x,ny,0,x,ny,r*2); + g.addColorStop(0,LANES[n.lane].color+"aa");g.addColorStop(1,LANES[n.lane].color+"00"); + cx.fillStyle=g;cx.beginPath();cx.arc(x,ny,r*2,0,Math.PI*2);cx.fill(); + cx.fillStyle=LANES[n.lane].color;cx.beginPath();cx.arc(x,ny,r,0,Math.PI*2);cx.fill(); + cx.strokeStyle="#fff";cx.lineWidth=2;cx.beginPath();cx.arc(x,ny,r,0,Math.PI*2);cx.stroke(); + cx.globalAlpha=1; + if(!n.missed&&dt<-HIT_WIN){n.missed=true;if(cStreak>0){cStreak=0;updateHud();}} } } } @@ -4109,8 +5528,29 @@ function playDrumAt(ac,lane,t,vol,arr){ f.type="highpass";f.frequency.value=7000;s.buffer=buf;s.connect(f);f.connect(g);g.connect(ac.destination); g.gain.setValueAtTime(vol*.5,t);g.gain.exponentialRampToValueAtTime(0.001,t+0.05); s.start(t);s.stop(t+0.06);mk(s); - } else { // tom / tom2 - const freq=type==="tom"?160:120; + } else if(type==="crash"){ + // Crash cymbal — long noise burst with resonance + const sz=ac.sampleRate*0.4,buf=ac.createBuffer(1,sz,ac.sampleRate),d=buf.getChannelData(0); + for(let i=0;i=LANES.length){ + // Done — apply and save + LANES.forEach(function(ln,i){if(keyRemapResult[i]!==undefined)ln.key=keyRemapResult[i];}); + var map={};LANES.forEach(function(ln,i){map[i]=ln.key;}); + localStorage.setItem("drgameKeyMap",JSON.stringify(map)); + customKeyMap=map; + keyRemapping=false; + document.getElementById("keyremap-overlay").classList.remove("show"); + buildPadToggles(); + return; + } + var ln=LANES[keyRemapStep]; + document.getElementById("keyremap-prompt").innerHTML="Press key for "+ln.label.toUpperCase()+""; + document.getElementById("keyremap-status").textContent="Step "+(keyRemapStep+1)+" of "+LANES.length+" (press any key)"; +} +var keyRemapCooldown=false; +window.addEventListener("keydown",function(e){ + if(keyRemapping){ + if(e.key==="Escape"){cancelKeyRemap();e.preventDefault();return;} + if(keyRemapCooldown)return; + e.preventDefault(); + keyRemapResult[keyRemapStep]=e.key===" "?" ":e.key.toLowerCase(); + keyRemapStep++; + keyRemapCooldown=true; + setTimeout(function(){keyRemapCooldown=false;},300); + showKeyRemapStep(); + return; + } +},true); + // ── INPUT ────────────────────────────────────────────── window.addEventListener("keydown",e=>{ + if(keyRemapping)return; if(e.key==="Escape"){e.preventDefault();togglePause();return;} if(paused)return; const i=LANES.findIndex(l=>l.key===e.key.toLowerCase()||(l.key===" "&&e.key===" ")); if(i>=0){e.preventDefault();triggerPad(i);} }); + +// ── GAMEPAD AUTO-DETECT ────────────────────────────── +var gpAutoDetected=false; +function autoDetectGamepad(gp){ + if(gpAutoDetected)return; + gpAutoDetected=true; + var nButtons=gp.buttons.length; + // Enable lanes based on detected button count (5 = standard Rock Band, more = extended kit) + var lanesToEnable=Math.min(nButtons,LANES.length); + // Always enable at least the first 5 (standard kit) if we have 5+ buttons + if(lanesToEnable>=5){ + for(var i=0;i<5;i++)activePads[i]=true; + // Enable extra lanes for extended kits (6+ buttons) + for(var j=5;j{ if(btn.pressed&&!prevBtns[bi]){