@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./fraunces-vietnamese-wght-normal-CnvboYUG.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./fraunces-latin-wght-normal-ukD16Tqj.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-wght-normal-DLoelf7F.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg: #171009;--bg-glow: #2c1a08;--panel: #221709;--panel-2: #2b1d0c;--line: #3f2c15;--line-soft: #33240f;--ink: #f3e7d3;--ink-dim: #b39c7e;--ink-faint: #7d6749;--amber: #e79a3c;--amber-hi: #ffbe63;--ember: #c96f2e;--cream: #f2e3c8;--brass: #96784c;--radius: 16px;--font-display: "Fraunces Variable", Georgia, serif;--font-ui: "Bricolage Grotesque Variable", "Avenir Next", sans-serif}*{margin:0;padding:0;box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-ui);color:var(--ink);background:radial-gradient(120vmax 60vmax at 50% -20%,var(--bg-glow) 0%,transparent 60%),radial-gradient(90vmax 50vmax at 110% 110%,#241205 0%,transparent 55%),var(--bg);min-height:100dvh;-webkit-font-smoothing:antialiased}body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;opacity:.05;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");z-index:5}button{font-family:inherit;color:inherit;background:none;border:none;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation;text-align:center;-moz-appearance:none;appearance:none;-webkit-appearance:none}.app{max-width:1220px;margin:0 auto;padding:14px clamp(14px,3vw,28px) 40px;position:relative;z-index:1}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 2px 18px;animation:rise .5s ease both}.brand{display:flex;align-items:baseline;gap:10px}.brand-mark{color:var(--amber);letter-spacing:2px;font-size:13px;transform:translateY(-3px);display:inline-block}.brand h1{font-family:var(--font-display);font-weight:620;font-size:clamp(24px,4vw,30px);letter-spacing:.2px;font-variation-settings:"opsz" 40}.instrument-pick select{-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:var(--font-ui);font-size:14px;font-weight:600;color:var(--ink);background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23e79a3c' stroke-width='1.6' fill='none'/%3E%3C/svg%3E") no-repeat right 14px center,linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line);border-radius:12px;padding:10px 34px 10px 14px;max-width:62vw}.instrument-pick select:focus-visible{outline:2px solid var(--amber);outline-offset:2px}.layout{display:grid;gap:22px;grid-template-columns:minmax(0,1fr);grid-template-areas:"stage" "voicings" "selectors"}.stage,.side-voicings,.selectors{min-width:0}.stage{grid-area:stage;animation:rise .55s .05s ease both}.side-voicings{grid-area:voicings;animation:rise .55s .12s ease both}.selectors{grid-area:selectors;animation:rise .55s .18s ease both}@media(min-width:1020px){.layout{grid-template-columns:minmax(330px,380px) minmax(0,1fr) 290px;grid-template-areas:"selectors stage voicings";align-items:start}.side-voicings{position:sticky;top:16px}}.stage{display:flex;flex-direction:column;align-items:center;gap:14px}.chord-head{width:100%;display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}.chord-title{display:flex;flex-direction:column;align-items:center;gap:2px}.chord-name{font-family:var(--font-display);font-size:clamp(52px,10vw,76px);font-weight:560;line-height:1;color:var(--cream);font-variation-settings:"opsz" 60;text-shadow:0 4px 30px rgba(231,154,60,.25)}.chord-kind{color:var(--ink-dim);font-size:14px;letter-spacing:.4px}.chord-notes{display:flex;flex-wrap:wrap;justify-content:center;gap:6px}.note-badge{font-size:13px;font-weight:650;color:var(--cream);background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line);border-radius:999px;padding:4px 11px}.note-badge em{font-style:normal;color:var(--amber);margin-right:3px;font-size:11px}.diagram{width:min(340px,88vw);border-radius:calc(var(--radius) + 6px);padding:10px 6px 2px;background:linear-gradient(160deg,rgba(255,190,99,.07),transparent 45%),linear-gradient(180deg,var(--panel-2) 0%,var(--panel) 100%);border:1px solid var(--line);box-shadow:0 20px 50px #00000073,inset 0 1px #f2e3c80f;transition:transform .12s ease,box-shadow .2s ease}.diagram:active{transform:scale(.985)}.diagram:focus-visible{outline:2px solid var(--amber);outline-offset:3px}.diagram svg{width:100%;height:auto;display:block}.d-fret{stroke:var(--line);stroke-width:2.5}.d-string{stroke:var(--brass);stroke-linecap:round}.d-nut{fill:var(--cream)}.d-basefret{fill:var(--amber);font-family:var(--font-display);font-size:30px;font-weight:600;text-anchor:middle}.d-stringname{fill:var(--ink-faint);font-family:var(--font-ui);font-size:14px;font-weight:700;text-anchor:middle;letter-spacing:1px}.d-open{fill:none;stroke:var(--cream);stroke-width:2.6;transition:stroke .15s ease}.d-mute{fill:var(--ink-faint);font-family:var(--font-ui);font-size:18px;font-weight:700;text-anchor:middle}.d-open.ringing{stroke:var(--amber-hi);filter:drop-shadow(0 0 8px rgba(255,190,99,.9));animation:ring-pop .5s ease;transform-box:fill-box;transform-origin:center}.d-dot{fill:var(--cream);transition:fill .15s ease}.d-finger{fill:#231708;font-family:var(--font-ui);font-size:19px;font-weight:800;text-anchor:middle;pointer-events:none}.d-dotg.ringing .d-dot{fill:var(--amber-hi);filter:drop-shadow(0 0 10px rgba(255,190,99,.95))}.d-dotg.ringing{animation:ring-pop .5s ease;transform-box:fill-box;transform-origin:center}.d-interval{fill:var(--ink-dim);font-family:var(--font-display);font-size:21px;font-weight:600;text-anchor:middle;transition:fill .15s ease}.d-interval.ringing{fill:var(--amber-hi)}@keyframes ring-pop{0%{transform:scale(1)}30%{transform:scale(1.22)}to{transform:scale(1)}}.play-info{display:flex;flex-direction:column;align-items:center;gap:8px;min-height:58px}.info-line{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px 16px}.inversion{font-size:13px;color:var(--ink-dim);letter-spacing:.3px}.auto-switch{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:700;color:var(--ink-dim);border:1px solid var(--line);border-radius:999px;padding:5px 13px 5px 6px;transition:color .15s ease,border-color .15s ease,box-shadow .2s ease}.auto-switch .knob{width:30px;height:18px;border-radius:999px;background:var(--panel-2);border:1px solid var(--line);position:relative;transition:background .2s ease,border-color .2s ease}.auto-switch .knob:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--ink-faint);transition:transform .2s ease,background .2s ease}.auto-switch.on{color:var(--amber-hi);border-color:var(--amber);box-shadow:0 0 18px #e79a3c40}.auto-switch.on .knob{background:#e79a3c47;border-color:var(--amber)}.auto-switch.on .knob:after{transform:translate(12px);background:var(--amber-hi)}.auto-switch:focus-visible{outline:2px solid var(--amber);outline-offset:2px}.chop-tag{font-size:11px;font-weight:800;letter-spacing:1.2px;color:#231708;background:linear-gradient(180deg,var(--amber-hi),var(--ember));border-radius:999px;padding:4px 11px;box-shadow:0 4px 14px #e79a3c66;cursor:help}.chop-mini{position:absolute;top:3px;right:5px;font-size:11px;color:var(--amber-hi);text-shadow:0 0 8px rgba(231,154,60,.8)}.chip.chop-chip{color:var(--amber);border-color:var(--amber);border-style:dashed}.chip.chop-chip.selected{color:#231708;background:linear-gradient(180deg,var(--amber-hi),var(--amber));border-style:solid}.help-btn{width:30px;height:30px;border-radius:50%;border:1px solid var(--line);color:var(--ink-dim);font-size:15px;font-weight:800;font-family:var(--font-display);display:inline-flex;align-items:center;justify-content:center;transition:all .15s ease}.help-btn:hover{border-color:var(--brass)}.help-btn.on{color:#231708;background:linear-gradient(180deg,var(--amber-hi),var(--amber));border-color:var(--amber)}.legend{width:min(560px,92vw);margin-top:4px;text-align:left;background:linear-gradient(180deg,#2b1d0ca6,#221709a6);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;animation:chip-in .25s ease both}.legend h3{font-family:var(--font-display);font-size:16px;font-weight:620;margin-bottom:10px;color:var(--cream)}.legend ul{list-style:none;display:flex;flex-direction:column;gap:8px;font-size:13.5px;line-height:1.45;color:var(--ink-dim)}.lg-sym{display:inline-block;font-family:var(--font-display);font-weight:700;color:var(--amber-hi);background:#e79a3c1f;border-radius:6px;padding:1px 7px;margin-right:4px;white-space:nowrap}.legend-terms{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line);display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:5px 14px;font-size:12.5px}.legend-terms div{display:flex;gap:7px;align-items:baseline}.legend-terms dt{font-family:var(--font-display);font-weight:700;color:var(--amber);min-width:26px}.legend-terms dd{color:var(--ink-dim)}.mode-chip{font-size:13px;font-weight:650;color:#231708;background:linear-gradient(180deg,var(--amber-hi),var(--amber));border-radius:999px;padding:7px 14px;box-shadow:0 6px 20px #e79a3c59;animation:chip-in .25s ease both}.mode-chip.idle{color:var(--ink-dim);background:transparent;border:1px dashed var(--line);box-shadow:none}@keyframes chip-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.selectors{display:flex;flex-direction:column;gap:20px}.keys{display:grid;grid-template-columns:repeat(14,1fr);grid-template-rows:auto auto;gap:7px}.key{border-radius:11px;font-weight:750;transition:transform .1s ease,background .15s ease,color .15s ease}.key:active{transform:translateY(1px) scale(.97)}.key-white{background:linear-gradient(180deg,#f7ecd8,#e4d1ac);color:#2b1c0b;font-size:17px;padding:15px 0 13px;box-shadow:0 3px #a88c5c,0 8px 16px #00000059}.key-black{background:linear-gradient(180deg,#100a04,#1f1509);border:1px solid var(--line);color:var(--ink-dim);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;font-size:12px;padding:9px 0 8px;box-shadow:0 3px #000,0 8px 14px #0006}.key.selected{background:linear-gradient(180deg,var(--amber-hi),var(--ember));color:#231708;box-shadow:0 3px #7c4a17,0 10px 26px #e79a3c73}.quality-group{margin-top:4px}.quality-group h3{font-family:var(--font-ui);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:2.4px;color:var(--amber);margin-bottom:9px}.quality-buttons{display:flex;flex-wrap:wrap;gap:7px}.quality{font-size:14px;font-weight:650;color:var(--ink);background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line-soft);border-radius:10px;padding:9px 13px;transition:transform .1s ease,background .15s ease,border-color .15s ease}.quality:hover{border-color:var(--brass)}.quality:active{transform:scale(.96)}.quality.selected{background:linear-gradient(180deg,var(--amber-hi),var(--amber));border-color:var(--amber);color:#231708;box-shadow:0 6px 18px #e79a3c59}.voicing-panel{background:linear-gradient(180deg,#2b1d0c80,#22170980);border:1px solid var(--line-soft);border-radius:var(--radius);padding:14px}.voicing-head h2{font-family:var(--font-display);font-size:17px;font-weight:600;margin-bottom:10px}.bass-filters{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.chip{font-size:12px;font-weight:700;color:var(--ink-dim);border:1px solid var(--line);border-radius:999px;padding:4px 11px;transition:all .15s ease}.chip.selected{color:#231708;background:var(--amber);border-color:var(--amber)}.voicing-scroll{display:grid;grid-auto-flow:column;grid-auto-columns:84px;gap:10px;overflow-x:auto;padding:4px 2px 10px;scrollbar-width:thin;scrollbar-color:var(--line) transparent;cursor:grab;user-select:none;-webkit-user-select:none;overscroll-behavior-x:contain}.voicing-scroll.dragging{cursor:grabbing;scroll-behavior:auto}@media(min-width:1020px){.voicing-scroll{grid-auto-flow:row;grid-template-columns:repeat(3,1fr);grid-auto-columns:unset;max-height:min(62vh,560px);overflow-x:hidden;overflow-y:auto;cursor:default}}.voicing-card{position:relative;background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line-soft);border-radius:12px;padding:8px 4px 6px;display:flex;flex-direction:column;align-items:center;gap:2px;transition:transform .12s ease,border-color .15s ease,box-shadow .2s ease}.voicing-card:hover{transform:translateY(-2px);border-color:var(--brass)}.voicing-card.selected{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber),0 8px 24px #e79a3c40}.mini{width:62px;height:auto}.m-fret{stroke:var(--line);stroke-width:1}.m-string{stroke:var(--brass)}.m-nut,.m-dot{fill:var(--cream)}.m-open{fill:none;stroke:var(--ink-faint);stroke-width:1.2}.m-mute{fill:var(--ink-faint);font-family:var(--font-ui);font-size:6.5px;font-weight:700;text-anchor:middle}.m-basefret{fill:var(--amber);font-family:var(--font-display);font-size:10px;font-weight:700;text-anchor:middle}.bass-tag{font-size:11px;font-weight:800;color:var(--ink-faint);letter-spacing:.5px}.bass-tag.root{color:var(--amber)}.voicing-count{margin-top:8px;font-size:12px;color:var(--ink-faint)}.empty{color:var(--ink-dim);font-size:14px;padding:12px 4px}.foot{margin-top:34px;text-align:center;color:var(--ink-faint);font-size:12.5px;letter-spacing:.3px}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@media(max-width:720px){.app{padding:6px 10px 18px}.topbar{padding:2px 2px 8px}.brand h1{font-size:19px}.brand-mark{font-size:10px}.instrument-pick select{font-size:12px;padding:7px 28px 7px 10px;border-radius:10px}.layout{grid-template-columns:minmax(0,1fr) 76px;grid-template-areas:"stage voicings" "selectors selectors";gap:10px}.side-voicings{height:0;min-height:100%}.stage{gap:5px}.chord-head{flex-direction:row;align-items:center;justify-content:center;gap:12px;text-align:left}.chord-title{align-items:flex-start;gap:0}.chord-name{font-size:34px}.chord-kind{font-size:10.5px}.chord-notes{justify-content:flex-start;gap:4px;max-width:150px}.note-badge{font-size:10px;padding:2px 7px}.diagram{width:100%;max-width:252px;padding:4px 3px 0}.play-info{min-height:0;gap:5px}.info-line{gap:6px 10px}.inversion{font-size:11px}.mode-chip{font-size:10.5px;padding:4px 10px}.auto-switch{font-size:11px;padding:3px 9px 3px 4px;gap:6px}.auto-switch .knob{width:26px;height:16px}.auto-switch .knob:after{width:10px;height:10px}.auto-switch.on .knob:after{transform:translate(10px)}.chop-tag{font-size:9.5px;padding:2px 8px}.help-btn{width:24px;height:24px;font-size:12px}.legend{padding:10px 12px}.legend ul{font-size:12px;gap:6px}.legend-terms{font-size:11.5px}.voicing-panel{height:100%;display:flex;flex-direction:column;background:none;border:none;padding:0}.voicing-head h2{font-family:var(--font-ui);font-size:8.5px;font-weight:800;text-transform:uppercase;letter-spacing:1px;text-align:center;color:var(--ink-faint);margin-bottom:6px}.bass-filters{justify-content:center;gap:3px;margin-bottom:6px}.chip{font-size:9px;padding:2px 6px}.voicing-scroll{flex:1;min-height:0;grid-auto-flow:row;grid-template-columns:1fr;grid-auto-columns:unset;gap:6px;overflow-x:hidden;overflow-y:auto;padding:2px 1px 4px}.mini{width:46px}.voicing-card{padding:5px 2px 4px;border-radius:9px}.bass-tag{font-size:9.5px}.chop-mini{font-size:9px;top:2px;right:3px}.voicing-count{margin-top:4px;font-size:8.5px;text-align:center}.selectors{gap:10px}.keys{gap:4px}.key-white{font-size:14px;padding:8px 0 7px;border-radius:8px;box-shadow:0 2px #a88c5c,0 4px 8px #0000004d}.key-black{font-size:10px;padding:5px 0 4px;border-radius:8px;box-shadow:0 2px #000,0 4px 8px #00000059}.quality-group h3{font-size:9px;letter-spacing:1.8px;margin-bottom:4px}.quality-buttons{gap:4px}.quality{font-size:12px;padding:5px 8px;border-radius:7px}.foot{margin-top:14px;font-size:10px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
