:root{--primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);--primary-gradient-hover: linear-gradient(135deg, #7b8ef0 0%, #8c5bb8 100%);--dark-gradient: linear-gradient(135deg, #1a1a1a, #2d2d2d);--piano-white-key: linear-gradient(to bottom, #fff 90%, #eee 100%);--piano-white-key-active: linear-gradient(to bottom, #f0f0f0 90%, #ddd 100%);--piano-black-key: linear-gradient(to bottom, #222 90%, #444 100%);--piano-black-key-active: linear-gradient(to bottom, #111 90%, #333 100%);--piano-background: #222;--text-primary: rgba(255, 255, 255, .87);--text-secondary: #666;--text-white: #fff;--text-dark: #333;--text-light: #eee;--text-muted: #ccc;--bg-primary: #242424;--bg-light: #ffffff;--bg-card: #1a1a1a;--bg-modal-overlay: rgba(0, 0, 0, .8);--border-light: #bbb;--border-dark: #444;--border-darker: #111;--border-accent: #646cff;--border-midi: #00ff88;--shadow-light: 0 2px 4px #0002;--shadow-medium: 0 4px 15px rgba(0, 0, 0, .3);--shadow-heavy: 0 4px 24px #0004;--shadow-piano-black: 0 2px 8px #0008;--shadow-button: 0 4px 15px rgba(102, 126, 234, .4);--shadow-button-hover: 0 6px 20px rgba(102, 126, 234, .6);--shadow-midi: 0 0 15px #00ff88, inset 0 0 10px #00ff8844;--piano-height: 200px;--piano-key-white-width: 40px;--piano-key-white-height: 180px;--piano-key-black-width: 26px;--piano-key-black-height: 110px;--piano-border-radius: 1rem;--piano-key-border-radius: 8px;--piano-key-black-border-radius: 6px;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-xxl: 3rem;--transition-fast: .1s;--transition-normal: .25s;--transition-slow: .3s;--font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;--font-size-sm: .8em;--font-size-base: 1em;--font-size-lg: 1.1em;--font-size-xl: 1.5em;--font-size-xxl: 3.2em;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--z-piano-white: 1;--z-piano-black: 2;--z-modal: 1000}@media (max-width: 600px){:root{--piano-height: 120px;--piano-key-white-width: 24px;--piano-key-white-height: 100px;--piano-key-black-width: 16px;--piano-key-black-height: 60px}}:root{font-family:var(--font-family);line-height:1.5;font-weight:var(--font-weight-normal);color-scheme:light dark;color:var(--text-primary);background-color:var(--bg-primary);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}#app{max-width:1280px;margin:0 auto;padding:var(--spacing-xl);text-align:center;width:100%}a{font-weight:var(--font-weight-medium);color:var(--border-accent);text-decoration:inherit;transition:color var(--transition-normal)}a:hover{color:#535bf2}h1{font-size:var(--font-size-xxl);line-height:1.1;margin:0 0 var(--spacing-xl) 0}h2{font-size:var(--font-size-xl);margin:0 0 var(--spacing-lg) 0}h3{font-size:var(--font-size-lg);margin:0 0 var(--spacing-md) 0}.card{padding:var(--spacing-xl);background:var(--bg-card);border-radius:var(--piano-key-border-radius);box-shadow:var(--shadow-medium)}.text-center{text-align:center}.text-muted{color:var(--text-secondary)}.text-italic{font-style:italic}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing-xs)}.mb-2{margin-bottom:var(--spacing-sm)}.mb-3{margin-bottom:var(--spacing-md)}.mb-4{margin-bottom:var(--spacing-lg)}.mb-5{margin-bottom:var(--spacing-xl)}.mt-0{margin-top:0}.mt-1{margin-top:var(--spacing-xs)}.mt-2{margin-top:var(--spacing-sm)}.mt-3{margin-top:var(--spacing-md)}.mt-4{margin-top:var(--spacing-lg)}.mt-5{margin-top:var(--spacing-xl)}@media (prefers-color-scheme: light){:root{color:#213547;background-color:var(--bg-light)}a:hover{color:#747bff}}.piano-container{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;min-height:60vh;margin:var(--spacing-xl) auto}.piano-keys{display:flex;position:relative;height:var(--piano-height);background:var(--piano-background);border-radius:var(--piano-border-radius);box-shadow:var(--shadow-heavy);padding:var(--spacing-md) var(--spacing-sm) var(--spacing-xl) var(--spacing-sm);-webkit-user-select:none;user-select:none}.piano-key{position:relative;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;cursor:pointer;margin:0 1px;z-index:var(--z-piano-white);transition:filter var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.piano-key.white{width:var(--piano-key-white-width);height:var(--piano-key-white-height);background:var(--piano-white-key);border:1px solid var(--border-light);border-radius:0 0 var(--piano-key-border-radius) var(--piano-key-border-radius);box-shadow:var(--shadow-light)}.piano-key.black{width:var(--piano-key-black-width);height:var(--piano-key-black-height);background:var(--piano-black-key);border:1px solid var(--border-darker);border-radius:0 0 var(--piano-key-black-border-radius) var(--piano-key-black-border-radius);margin-left:calc(var(--piano-key-black-width) / -2);margin-right:calc(var(--piano-key-black-width) / -2);z-index:var(--z-piano-black);box-shadow:var(--shadow-piano-black)}.piano-key-label{font-size:var(--font-size-sm);color:var(--text-dark);margin-bottom:8px;pointer-events:none;-webkit-user-select:none;user-select:none;font-weight:var(--font-weight-medium)}.piano-key.black .piano-key-label{color:var(--text-light)}.piano-key.active{transform:scale(.95);filter:brightness(.8)}.piano-key.white.active{background:var(--piano-white-key-active)}.piano-key.black.active{background:var(--piano-black-key-active)}.piano-key.midi-active{box-shadow:var(--shadow-midi);border-color:var(--border-midi)}@media (max-width: 600px){.piano-keys{height:var(--piano-height)}.piano-key.white{width:var(--piano-key-white-width);height:var(--piano-key-white-height)}.piano-key.black{width:var(--piano-key-black-width);height:var(--piano-key-black-height);margin-left:calc(var(--piano-key-black-width) / -2);margin-right:calc(var(--piano-key-black-width) / -2)}}button{border-radius:var(--piano-key-border-radius);border:1px solid transparent;padding:.6em 1.2em;font-size:var(--font-size-base);font-weight:var(--font-weight-medium);font-family:inherit;background-color:var(--bg-card);cursor:pointer;transition:border-color var(--transition-normal)}button:hover{border-color:var(--border-accent)}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}.control-button{background:var(--primary-gradient);color:var(--text-white);border:none;padding:12px 24px;border-radius:25px;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--transition-slow) ease;box-shadow:var(--shadow-button);min-width:120px}.control-button:hover{transform:translateY(-2px);box-shadow:var(--shadow-button-hover);background:var(--primary-gradient-hover)}.control-button:active{transform:translateY(0)}.control-button:focus{outline:2px solid var(--border-accent);outline-offset:2px}.audio-activate-button{background:var(--primary-gradient);color:var(--text-white);border:none;padding:15px 30px;border-radius:25px;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--transition-slow) ease;box-shadow:var(--shadow-button-hover);min-width:180px}.audio-activate-button:hover{transform:translateY(-2px);box-shadow:0 8px 25px #667eea99;background:var(--primary-gradient-hover)}.audio-activate-button:active{transform:translateY(0)}.controls{display:flex;flex-direction:column;align-items:center;gap:10px;margin-top:var(--spacing-lg)}#midi-status-container{display:flex;justify-content:center;margin-top:var(--spacing-lg)}.midi-status{background:var(--dark-gradient);color:var(--text-white);padding:12px 20px;border-radius:25px;text-align:center;font-size:.9em;font-weight:var(--font-weight-medium);box-shadow:var(--shadow-medium);border:1px solid var(--border-dark);position:relative;overflow:hidden;max-width:300px}.midi-status:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.1),transparent);animation:shimmer 3s infinite}@keyframes shimmer{0%{left:-100%}to{left:100%}}.midi-help{color:var(--text-secondary);font-style:italic;text-align:center;font-size:var(--font-size-sm)}@media (prefers-color-scheme: light){button{background-color:#f9f9f9;color:#213547}}.audio-modal{position:fixed;top:0;left:0;width:100%;height:100%;background:var(--bg-modal-overlay);display:flex;justify-content:center;align-items:center;z-index:var(--z-modal);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);animation:fadeIn var(--transition-slow) ease}.audio-modal-content{background:var(--dark-gradient);padding:30px 40px;border-radius:20px;text-align:center;box-shadow:0 10px 30px #00000080;border:1px solid var(--border-dark);max-width:400px;width:90%;animation:slideIn var(--transition-slow) ease}.audio-modal-content h3{color:var(--text-white);margin:0 0 15px;font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold)}.audio-modal-content p{color:var(--text-muted);margin:0 0 25px;font-size:var(--font-size-lg);line-height:1.4}.modal{position:fixed;top:0;left:0;width:100%;height:100%;background:var(--bg-modal-overlay);display:flex;justify-content:center;align-items:center;z-index:var(--z-modal);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.modal-content{background:var(--dark-gradient);padding:var(--spacing-xl);border-radius:20px;text-align:center;box-shadow:0 10px 30px #00000080;border:1px solid var(--border-dark);max-width:500px;width:90%;max-height:80vh;overflow-y:auto}.modal-header{margin-bottom:var(--spacing-lg)}.modal-header h2{color:var(--text-white);margin:0}.modal-body{margin-bottom:var(--spacing-lg);color:var(--text-muted)}.modal-footer{display:flex;gap:var(--spacing-md);justify-content:center;flex-wrap:wrap}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:var(--bg-modal-overlay);z-index:var(--z-modal);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:scale(.8) translateY(-20px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}@keyframes slideOut{0%{transform:scale(1) translateY(0);opacity:1}to{transform:scale(.8) translateY(-20px);opacity:0}}@media (max-width: 600px){.modal-content,.audio-modal-content{padding:var(--spacing-lg);margin:var(--spacing-md);width:calc(100% - var(--spacing-xl))}.modal-footer{flex-direction:column}.audio-activate-button{min-width:140px;padding:12px 24px;font-size:var(--font-size-base)}}@media (max-width: 480px){#app{padding:var(--spacing-md)}h1{font-size:2.2em}.piano-container{margin:var(--spacing-md) auto}.controls{gap:var(--spacing-sm)}.control-button{padding:10px 20px;font-size:.9em;min-width:100px}}@media (max-width: 768px){#app{padding:var(--spacing-lg)}.piano-container{min-height:50vh}}@media (min-width: 1200px){.piano-container{min-height:70vh}.piano-keys{height:240px}.piano-key.white{width:48px;height:220px}.piano-key.black{width:32px;height:140px;margin-left:-16px;margin-right:-16px}}.d-none{display:none!important}.d-block{display:block!important}.d-flex{display:flex!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-around{justify-content:space-around!important}.align-center{align-items:center!important}.align-start{align-items:flex-start!important}.align-end{align-items:flex-end!important}.w-full{width:100%!important}.w-auto{width:auto!important}.max-w-full{max-width:100%!important}.h-full{height:100%!important}.h-auto{height:auto!important}.min-h-screen{min-height:100vh!important}.relative{position:relative!important}.absolute{position:absolute!important}.fixed{position:fixed!important}.sticky{position:sticky!important}.overflow-hidden{overflow:hidden!important}.overflow-auto{overflow:auto!important}.overflow-scroll{overflow:scroll!important}.cursor-pointer{cursor:pointer!important}.cursor-default{cursor:default!important}.cursor-not-allowed{cursor:not-allowed!important}.user-select-none{-webkit-user-select:none!important;user-select:none!important}.pointer-events-none{pointer-events:none!important}@media (max-width: 600px){.hidden-mobile{display:none!important}}@media (min-width: 601px){.visible-mobile{display:none!important}}@media (max-width: 768px){.hidden-tablet{display:none!important}}@media (min-width: 769px){.visible-tablet{display:none!important}}@media (hover: hover){.hover-effect:hover{transform:translateY(-2px);transition:transform var(--transition-normal)}}
