:root{--bg: #f4efe6;--panel: #fbf8f1;--ink: #3a332b;--ink-soft: #6f665a;--line: #e0d6c4;--board: #e7d3ae;--board-edge: #cdb489;--accent: #c25b45;--on: #d9c7a3}*{box-sizing:border-box}html,body{margin:0;height:100%;color:var(--ink);font-family:Yrsa,Georgia,serif;font-size:17px}body{background:var(--bg) url(/assets/bg-CrmpFiex.jpg) center / cover no-repeat}.app{display:flex;gap:28px;align-items:stretch;padding:20px;height:100vh;height:100dvh;box-sizing:border-box;overflow:hidden;max-width:1600px;margin:0 auto}.board{flex:0 0 auto;height:100%;max-width:50%;min-width:0;display:flex;align-items:flex-start}svg.neck{height:100%;width:auto;max-width:100%;display:block}.fretboard{fill:var(--board);stroke:var(--board-edge);stroke-width:2}.nut{stroke:#6b5a3f;stroke-width:6;stroke-linecap:round}.fret{stroke:#b49b74;stroke-width:2}.string{stroke:#7c6f5b}.inlay{fill:#cbb488}.fret-num{fill:var(--ink-soft);font-size:14px;text-anchor:end}.bg-note{fill:#fff}.bg-label{fill:#77706a;font-size:12px;text-anchor:middle;pointer-events:none}.neck g.bg,.neck g.hl{cursor:pointer}.neck g.bg:hover .bg-note{fill:#f0ece2}.neck g.hl:hover circle{filter:brightness(1.08)}.hl-label{fill:#fff;font-size:13px;font-weight:600;text-anchor:middle;pointer-events:none}.panel{flex:1 1 auto;min-width:0;min-height:0;overflow-y:auto;padding:18px 20px 96px}.panel section+section{margin-top:22px}.ribbon{display:flex;align-items:center;gap:10px;margin-bottom:12px}.ribbon:before,.ribbon:after{content:"";flex:1;height:2.5px;background:#3a332b4d}.ribbon-pill{background:#ffffffeb;border:1px solid var(--line);border-radius:999px;padding:5px 16px;font-size:13px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);text-align:center;box-shadow:0 0 5px -1px #000}.ribbon-pill .accent{color:var(--accent)}.ribbon-pill.tab{cursor:pointer;color:var(--ink);font-size:14px}.ribbon-pill.tab:hover{border-color:var(--board-edge)}.ribbon-pill.tab.on{background:var(--accent);border-color:var(--accent);color:#fff}.ribbon .ribbon-pill+.ribbon-pill{margin-left:4px}.ribbon.tabbar{margin:22px 0 14px}.accent{color:var(--accent)}h2 .accent{font-weight:700}.family-btn:disabled{opacity:.4;cursor:default;background:transparent}.member-row{display:flex;align-items:center;flex-wrap:nowrap;gap:4px;padding:4px 6px}.member-name{font-size:13px;margin-right:auto;white-space:nowrap}.member-name.greyed{color:var(--ink-soft);opacity:.4}.key-square{border:none;border-radius:6px;color:#fff;font-size:12px;font-weight:600;padding:3px 7px;box-shadow:0 0 5px -1px #000}.key-square.on{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--ink),0 0 5px -1px #000}button{font-family:inherit;font-size:16px;color:var(--ink);background:#fff;border:1px solid var(--line);border-radius:9px;padding:8px 12px;cursor:pointer;transition:background .12s,border-color .12s}button:hover{border-color:var(--board-edge)}button.on{background:var(--on);border-color:var(--board-edge);font-weight:600}.keybar-wrap{display:flex;justify-content:center}.keybar{display:inline-flex;background:#fff;border:1px solid var(--line);border-radius:999px;overflow:hidden;box-shadow:0 0 5px -1px #000}.keyseg{flex:none;min-width:0;border:none;border-left:1px solid var(--line);border-radius:0;background:transparent;padding:7px 11px;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.08;font-size:14px}.keyseg:first-child{border-left:none}.keyseg:hover{background:#0000000a}.keyseg.on{background:var(--accent);color:#fff}.keyseg.on .enh,.keyseg.on .enh.main{color:#fff}.stack{display:flex;flex-direction:column;align-items:center}.enh{color:var(--ink-soft);font-weight:400}.enh.main{color:var(--ink);font-weight:700}.ribbon-pill.on{background:var(--accent);border-color:var(--accent);color:#fff}.chord-table{display:flex;gap:6px;align-items:flex-start}.chord-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}.chord-col-head{border-radius:999px;color:#fff;font-size:13px;font-weight:600;padding:5px 0;text-align:center;box-shadow:0 0 5px -1px #000}.chord-chip{border:1px solid var(--line);border-radius:8px;font-size:12.5px;line-height:1.25;padding:4px 2px;text-align:center}.chord-chip.on{border-color:transparent;color:#fff;font-weight:600}.chord-notes{margin-top:10px}.mute{position:fixed;right:24px;bottom:24px;width:46px;height:46px;padding:0;border-radius:50%;font-size:20px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0003;z-index:10}.tone-row{display:flex;flex-wrap:wrap;justify-content:center;gap:7px}.tone{width:42px;height:42px;padding:0;border-radius:50%;border:none;color:#fff;font-size:15px;font-weight:600;display:flex;align-items:center;justify-content:center;transition:transform .1s;box-shadow:0 0 5px -1px #000}.tone:hover{transform:translateY(-2px)}.tone.off{background:#fff;color:#77706a}.tone.root{box-shadow:0 0 0 2px #fff,0 0 0 5px var(--accent)}.tonewheel-editing .tone.off{border:2px dashed var(--board-edge)}.scale-row{position:relative;display:flex;justify-content:center;align-items:center;gap:10px;margin-top:14px}.scale-row>button{box-shadow:0 0 5px -1px #000}.combo-btn{min-width:160px;font-weight:600}.arrow{padding:8px 13px;font-size:13px}.arrow:disabled{opacity:.4;box-shadow:none;cursor:default}.modal-catcher{position:fixed;inset:0;z-index:20}.scale-modal{position:absolute;top:calc(100% + 10px);left:50%;transform:translate(-50%);width:min(380px,100%);background:#fffffff7;border:1px solid var(--line);border-radius:12px;box-shadow:0 0 5px -1px #000;display:flex;z-index:30}.scale-modal.wide{width:min(540px,100%)}.scale-modal .families{flex:1;border-right:1px solid var(--line);padding:6px;display:flex;flex-direction:column;gap:2px}.scale-modal .members{flex:1.5;padding:6px;display:flex;flex-direction:column;gap:2px}.family-btn,.member-btn{border:none;box-shadow:none;border-radius:8px;padding:6px 10px;text-align:left;font-size:14px;background:transparent}.family-btn:hover,.member-btn:hover{border-color:transparent;background:#0000000d}.family-btn.on{background:var(--on)}.member-btn.on{background:var(--accent);color:#fff}.members-empty{color:var(--ink-soft);font-size:14px;padding:6px 10px}
