:root{--bg:#fbfaf7;--fg:#1c1c21;--muted:#6b6b75;--line:#e4e2dc;--tile:#fff;--accent:#5b4bdb;--rail-w:68px;--rail-w-open:248px;--serif:Georgia, "Times New Roman", serif;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#141418;--fg:#ececf1;--muted:#9a9aa6;--line:#2c2c34;--tile:#1d1d23;--accent:#9d92ff;color-scheme:dark}}:root[data-theme=dark]{--bg:#141418;--fg:#ececf1;--muted:#9a9aa6;--line:#2c2c34;--tile:#1d1d23;--accent:#9d92ff;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{background:var(--bg)}body{background:var(--bg);min-height:100vh;color:var(--fg);margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.6}a{color:var(--accent)}.page{min-height:100vh;padding:48px 32px 0 calc(var(--rail-w) + 32px);flex-direction:column;display:flex}.page>main{flex:1}.site-footer{border-top:1px solid var(--line);color:var(--muted);text-align:center;margin-top:48px;padding:18px 0;font-size:.85rem}.page h1{margin:0 0 16px;font-size:2rem;line-height:1.2}.home{place-items:center;display:grid}.home h1{letter-spacing:.02em;text-align:center;margin:0;font-size:clamp(2.5rem,8vw,5rem)}.rail{--r-bg:#16161b;--r-fg:#a4a4b0;--r-fg-hi:#fff;--r-active:#26262e;--r-line:#34343e;z-index:50;width:var(--rail-w);background:var(--r-bg);color:var(--r-fg);flex-direction:column;justify-content:space-between;padding:24px 4px 16px;transition:width .22s;display:flex;position:fixed;inset:0 auto 0 0;overflow:hidden}.rail .view{scrollbar-width:none;flex-direction:column;flex:1;justify-content:space-between;min-height:0;animation:.18s view-in;display:flex;overflow:hidden auto}.rail .view::-webkit-scrollbar{display:none}@keyframes view-in{0%{opacity:0}}.rail ul{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.rail a,.rail .back{height:54px;color:var(--r-fg);white-space:nowrap;border-radius:12px;align-items:center;gap:16px;padding:0 18px;text-decoration:none;display:flex}.rail .back{width:100%;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0}.rail .back-item{border-bottom:1px solid var(--r-line);margin-bottom:4px;padding-bottom:4px}.rail a:hover,.rail a:focus-visible,.rail .back:hover,.rail .back:focus-visible,.rail a[aria-current]{color:var(--r-fg-hi);background:var(--r-active)}.rail a:focus-visible,.rail .back:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.rail svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:24px;height:24px}.rail .label{opacity:0;transition:opacity .15s}.rail .sub-wrap{grid-template-rows:0fr;transition:grid-template-rows .22s;display:grid}.rail .view-section .sub-wrap{grid-template-rows:1fr}.rail .sub{gap:2px;min-height:0;position:relative;overflow:hidden}.rail .sub:before{content:"";background:var(--r-line);border-radius:1px;width:2px;position:absolute;top:8px;bottom:6px;left:29px}.rail .sub li:first-child{margin-top:4px}.rail .sub a{gap:12px;height:42px;margin-left:34px;padding:0 8px;font-size:.92rem;transition:margin-left .22s,padding .22s}.rail .sub svg{width:20px;height:20px;margin:0 2px}.rail li.open>a:not([aria-current]){color:var(--r-fg-hi)}.rail .sub .sub-wrap{margin-left:24px;transition:grid-template-rows .22s,margin-left .22s}@media (hover:hover) and (width>=761px){.rail:hover,.rail:focus-within{width:var(--rail-w-open)}.rail:hover .label,.rail:focus-within .label{opacity:1;transition-delay:80ms}.rail:not(:hover):not(:focus-within) .sub a{margin-left:0;padding:0 18px}.rail:not(:hover):not(:focus-within) .sub .sub-wrap{margin-left:0}.rail:not(:hover):not(:focus-within) .sub:before{opacity:0}.rail li.has-sub:hover>.sub-wrap,.rail li.has-sub:focus-within>.sub-wrap,.rail:hover li.has-sub.open>.sub-wrap,.rail:focus-within li.has-sub.open>.sub-wrap{grid-template-rows:1fr}}.menu-btn,.backdrop{display:none}@media (width<=760px),(hover:none){.page{padding:72px 16px 0}.menu-btn{z-index:40;border:1px solid var(--line);background:var(--tile);width:44px;height:44px;color:var(--fg);cursor:pointer;border-radius:10px;place-items:center;display:grid;position:fixed;top:12px;left:16px}.menu-btn svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;width:22px;height:22px}.rail{width:var(--rail-w-open);transition:transform .22s;transform:translate(-100%)}.rail.drawer-open{transform:none}.rail .label{opacity:1}.rail .sub-wrap{grid-template-rows:1fr}.backdrop{z-index:45;background:#00000080;display:block;position:fixed;inset:0}.backdrop[hidden]{display:none}}#loader{z-index:100;pointer-events:none;display:none;position:fixed;inset:0}html.loading #loader{pointer-events:auto;display:block}#loader .panel{background:var(--bg);width:50.2%;transition:transform .9s cubic-bezier(.7,0,.2,1);position:absolute;top:0;bottom:0}#loader .panel-l{border-right:1px solid var(--line);left:0}#loader .panel-r{border-left:1px solid var(--line);right:0}html.loading .page,html.loading .rail,html.loading .menu-btn{opacity:0}html.loading .page{transform:scale(.97)}html.loading.open .page,html.loading.open .rail,html.loading.open .menu-btn{opacity:1;transition:opacity .9s}html.loading.open .page{transition:opacity .9s,transform .9s;transform:none}html.loading.open .panel-l{transform:translate(-100%)}html.loading.open .panel-r{transform:translate(100%)}@media (prefers-reduced-motion:reduce){#loader .panel{transition:none}html.loading.open .panel-l,html.loading.open .panel-r{transform:none}#loader{transition:opacity .6s}html.loading.open #loader{opacity:0}html.loading .page{transform:none}}.settings{width:100%;max-width:760px;margin:0 auto}.section-title{margin:24px 0 4px;font-size:1.1rem}.theme-tiles{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:8px 0 32px;display:grid}.theme-tile{border:1px solid var(--line);background:var(--tile);color:var(--fg);font:inherit;cursor:pointer;border-radius:12px;flex-direction:column;align-items:center;gap:10px;padding:18px 8px;display:flex}.theme-tile svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:28px;height:28px}.theme-tile[aria-pressed=true]{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent);color:var(--accent)}.theme-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.help h2{margin:0 0 8px;font-size:1.1rem}.help ul{margin:0;padding-left:1.4em}.help li{margin-bottom:10px}@media (width<=760px){.theme-tiles{gap:8px}.theme-tile{text-align:center;padding:14px 4px;font-size:.85rem}}.calc-page{width:100%;max-width:760px;margin:0 auto}.calc-page .lead{color:var(--muted);margin:0 0 24px}.calc-form{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:28px;display:grid}.field{flex-direction:column;gap:6px;display:flex}.field-label{color:var(--muted);font-size:.85rem;font-weight:600}.pair{grid-template-columns:1fr 1fr;gap:8px;display:grid}.calc-page select{border:1px solid var(--line);background:var(--tile);width:100%;min-height:44px;color:var(--fg);font:inherit;border-radius:10px;padding:8px 12px}.calc-page select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.note-row{flex-wrap:wrap;gap:10px;display:flex}.note-chip{border:1px solid var(--line);background:var(--tile);border-radius:12px;flex-direction:column;align-items:center;min-width:64px;padding:10px 14px;display:flex}.note-name{font-family:var(--serif);font-size:1.6rem;line-height:1.2}.note-interval{color:var(--muted);font-size:.75rem}.summary{color:var(--muted);margin:20px 0 0}@media (width<=760px){.note-chip{min-width:56px;padding:8px 10px}}.circle{width:100%;max-width:440px;margin:0 auto 28px;display:block}.circle .seg{cursor:pointer;--seg-major:hsl(var(--h) 80% 80%);--seg-minor:hsl(var(--h) 75% 89%);--seg-hover:hsl(var(--h) 85% 70%);--seg-sel:hsl(var(--h) 70% 40%);outline:none}:root[data-theme=dark] .circle .seg{--seg-major:hsl(var(--h) 45% 28%);--seg-minor:hsl(var(--h) 35% 20%);--seg-hover:hsl(var(--h) 55% 37%);--seg-sel:hsl(var(--h) 65% 46%)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .circle .seg{--seg-major:hsl(var(--h) 45% 28%);--seg-minor:hsl(var(--h) 35% 20%);--seg-hover:hsl(var(--h) 55% 37%);--seg-sel:hsl(var(--h) 65% 46%)}}.circle .seg path{fill:var(--seg-major);stroke:var(--bg);stroke-width:1.5px;transition:fill .15s}.circle .seg.minor path{fill:var(--seg-minor)}.circle .seg:hover path{fill:var(--seg-hover)}.circle .seg.nbr path,.circle .seg.rel path{stroke:var(--fg);stroke-width:2.5px}.circle .seg.sel path{fill:var(--seg-sel);stroke:var(--fg);stroke-width:2.5px}.circle .seg:focus-visible path{stroke:var(--fg);stroke-width:4px}.circle text{text-anchor:middle;dominant-baseline:central;fill:var(--fg);pointer-events:none}.circle .seg-name{font-family:var(--serif);font-size:19px}.circle .seg.minor .seg-name{font-size:14px}.circle .seg-sig{fill:var(--fg);opacity:.7;font-size:9px}.circle .seg.sel text{fill:#fff}.circle .center-title{font-family:var(--serif);font-size:17px}.circle .center-sig{fill:var(--muted);font-size:7.5px}.facts{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px 24px;margin:0 0 8px;display:grid}.facts dt{color:var(--muted);font-size:.85rem;font-weight:600}.facts dd{margin:2px 0 0}.mini-title{margin:20px 0 10px;font-size:.95rem}.page-block{width:100%;max-width:760px;margin:0 auto}.page-block .lead{color:var(--muted);margin:0 0 24px}.page-block>p{margin:0 0 14px}.empty{color:var(--muted)}.jump{flex-wrap:wrap;gap:8px;margin:0 0 8px;display:flex}.jump a{border:1px solid var(--line);background:var(--tile);color:var(--fg);border-radius:999px;padding:6px 14px;font-size:.9rem;text-decoration:none}.jump a:hover,.jump a:focus-visible{border-color:var(--accent);color:var(--accent)}.res-section{scroll-margin-top:24px}.res-list{flex-direction:column;gap:10px;margin:8px 0 0;padding:0;list-style:none;display:flex}.res-item{border:1px solid var(--line);background:var(--tile);border-radius:12px;padding:14px 16px}.res-title{font-weight:600}.res-by{color:var(--muted);font-weight:400}.res-note{color:var(--muted);margin-top:4px;font-size:.95rem}.gloss-search{border:1px solid var(--line);background:var(--tile);width:100%;min-height:44px;color:var(--fg);font:inherit;border-radius:10px;margin:6px 0 20px;padding:8px 12px;display:block}.gloss-search:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.letter-title{border-bottom:1px solid var(--line);color:var(--accent);margin:28px 0 8px;padding-bottom:4px;font-size:1.1rem}.term{margin:14px 0;scroll-margin-top:24px}.term h3{margin:0 0 2px;font-size:1rem}.term p{color:var(--muted);margin:0}[hidden]{display:none!important}.page-block.wide{max-width:960px}.crumb{margin:0 0 16px}.btn{border:1px solid var(--line);background:var(--tile);min-height:40px;color:var(--fg);border-radius:10px;align-items:center;gap:6px;padding:8px 16px;font-size:.9rem;text-decoration:none;display:inline-flex}.btn:hover,.btn:focus-visible{border-color:var(--accent);color:var(--accent)}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.game-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin:0 0 24px;padding:0;list-style:none;display:grid}.game-card{border:1px solid var(--line);background:var(--tile);height:100%;color:var(--fg);border-radius:12px;flex-direction:column;gap:2px;padding:14px 16px;text-decoration:none;display:flex}.game-card:hover,.game-card:focus-visible{border-color:var(--accent)}.game-num{letter-spacing:.04em;color:var(--accent);font-size:.8rem;font-weight:700}.game-ja{font-size:1.15rem;font-weight:600}.game-en{color:var(--muted);font-size:.9rem}.game-meta{color:var(--muted);margin-top:6px;font-size:.85rem}.source-note{color:var(--muted);font-size:.9rem}.page-block h1 .game-num{margin-right:10px;font-size:1rem}.track-list{border:1px solid var(--line);background:var(--tile);border-radius:12px;margin:0 0 24px;padding:0;list-style:none;overflow:hidden}.track{border-top:1px solid var(--line);grid-template-columns:2.2rem minmax(0,1fr) 23rem;align-items:baseline;gap:4px 12px;padding:10px 16px;display:grid}.track:first-child{border-top:0}.track-n{color:var(--muted);font-variant-numeric:tabular-nums}.track-title{overflow-wrap:anywhere;font-weight:600}.track-role{color:var(--muted);font-size:.9rem}.game-nav{justify-content:space-between;gap:16px;display:flex}@media (width<=760px){.track{grid-template-columns:2rem minmax(0,1fr)}.track-role{grid-column:2}.game-nav{flex-direction:column}.game-nav .btn{justify-content:center}}.table-scroll{margin-bottom:8px;overflow-x:auto}.wtc{border-collapse:collapse;border:1px solid var(--line);background:var(--tile);font-variant-numeric:tabular-nums;width:100%}.wtc th,.wtc td{border-top:1px solid var(--line);text-align:left;white-space:nowrap;padding:8px 14px}.wtc thead th{color:var(--muted);border-top:0;font-size:.85rem}.wtc tbody th{font-weight:600}.wtc tbody tr:hover{background:color-mix(in srgb, var(--accent) 8%, var(--tile))}.seg-group{flex-wrap:wrap;gap:6px;display:flex}.seg-btn{border:1px solid var(--line);background:var(--tile);min-width:42px;min-height:42px;color:var(--fg);font:inherit;cursor:pointer;border-radius:10px;padding:6px 12px}.seg-btn:hover{border-color:var(--accent)}.seg-btn[aria-pressed=true]{border-color:var(--accent);background:var(--accent);color:var(--bg);font-weight:600}.seg-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.chord-form{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.chord-head{flex-wrap:wrap;align-items:baseline;gap:6px 20px;margin-bottom:16px;display:flex}.chord-symbol{font-family:var(--serif);font-size:clamp(2rem,6vw,3rem);line-height:1.1}.muted-line{color:var(--muted);font-size:.9rem}.keyboard-wrap{margin:20px 0}.keyboard{width:100%;max-width:680px;height:auto;display:block}.keyboard .key.white{fill:#fdfdfb;stroke:#9a9aa6;stroke-width:1px}.keyboard .key.black{fill:#1c1c21;stroke:#000;stroke-width:1px}.keyboard .key.white.on{fill:color-mix(in srgb, var(--accent) 45%, #fff)}.keyboard .key.black.on{fill:var(--accent)}.keyboard .key-label{text-anchor:middle;fill:#1c1c21;pointer-events:none;font-size:11px;font-weight:700}.keyboard .black-label{fill:#fff;font-size:9px}:root[data-theme=dark] .keyboard .key.black.on .black-label,:root[data-theme=dark] .keyboard .black-label{fill:#fff}.btn-row{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}button.btn{cursor:pointer;font:inherit;font-size:.9rem}.dna{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px 24px;margin:8px 0;display:grid}.dna dt{color:var(--muted);font-size:.85rem;font-weight:600}.dna dd{overflow-wrap:anywhere;margin:2px 0 0}.overview-tools{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-bottom:8px;display:grid}.overview-tools .gloss-search{margin:0}.pat-group{margin-top:8px}.group-blurb{color:var(--muted);margin:0 0 12px;font-size:.95rem}.pat-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin:0 0 20px;padding:0;list-style:none;display:grid}.pat-tile a{border:1px solid var(--line);background:var(--tile);height:100%;color:var(--fg);border-radius:12px;flex-direction:column;gap:4px;padding:14px 16px;text-decoration:none;display:flex}.pat-tile a:hover,.pat-tile a:focus-visible{border-color:var(--accent)}.pat-name{font-weight:600}.pat-aka{color:var(--muted);font-size:.85rem}.pat-bass{letter-spacing:.02em;font-size:1.05rem}.pat-chips{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.pat-chips.big{margin:0 0 16px}.chip{border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:2px 10px;font-size:.8rem}.chip-accent{border-color:var(--accent);color:var(--accent)}.degrees{border:1px solid var(--line);background:var(--tile);border-radius:12px;flex-direction:column;gap:8px;margin:0 0 16px;padding:14px 16px;display:flex}.degree-row{flex-wrap:wrap;align-items:baseline;gap:14px;display:flex}.degree-label{width:4.5rem;color:var(--muted);font-size:.85rem;font-weight:600}.degree-line{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.degree{font-size:1.3rem;line-height:1}.degree-text{color:var(--muted);font-size:.95rem}.summary-text{margin:0 0 20px;font-size:1.05rem}.rule-list ul{flex-direction:column;gap:10px;margin:0 0 8px;padding:0;list-style:none;display:flex}.rule-list li{border:1px solid var(--line);background:var(--tile);border-radius:10px;padding:10px 14px}.badge{letter-spacing:.03em;text-transform:uppercase;color:#fff;vertical-align:1px;border-radius:6px;margin-right:6px;padding:1px 8px;font-size:.72rem;font-weight:700;display:inline-block}.badge-rule{background:#c0392b}.badge-guide{background:#b9770e}.badge-need{background:#5d6d7e}.figures-box{border:1px solid var(--line);background:var(--tile);white-space:pre-wrap;border-radius:10px;margin:0 0 12px;padding:12px 14px;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:.9rem;overflow-x:auto}.example{margin:0 0 24px}.example h3{margin:0 0 8px;font-size:1rem}.caption{color:var(--muted);margin:8px 0 0;font-size:.9rem}.variant{border:1px solid var(--line);background:var(--tile);border-radius:10px;margin:0 0 10px;padding:10px 14px}.variant summary{cursor:pointer;font-weight:600}.source-list{color:var(--muted);overflow-wrap:anywhere;margin:0;padding-left:1.2em;font-size:.92rem}.owner-box,.owner-note{background:color-mix(in srgb, #b9770e 10%, var(--tile));border:1px dashed #b9770e;border-radius:10px;margin-top:24px;padding:12px 14px;font-size:.9rem}.owner-note{margin-top:8px}.pattern-page .btn-row{margin-bottom:16px}.circle .shape{pointer-events:none}.circle .shape-poly{fill:color-mix(in srgb, var(--fg) 14%, transparent);stroke:var(--fg);stroke-width:3px;stroke-linejoin:round}.circle .shape-dot{fill:var(--fg);stroke:var(--bg);stroke-width:2px}.shape-panel{margin-top:28px}.shape-caption{margin:12px 0 0}.hint{margin:8px 0 12px}button.note-chip{font:inherit;color:var(--fg);cursor:pointer}button.note-chip:hover,button.note-chip:focus-visible{border-color:var(--accent)}button.note-chip[aria-pressed=true]{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.page-block .about-list{margin:0 0 14px;padding-left:1.2em}.about-list li{margin-bottom:8px}.staff{border:1px solid var(--line);background:var(--tile);min-height:200px;color:var(--fg);border-radius:12px;margin-bottom:12px;padding:4px 8px;overflow-x:auto}.staff svg{max-width:none;display:block}.staff-controls{flex-wrap:wrap;gap:12px 24px;margin-bottom:16px;display:flex}.audio-settings{gap:16px;margin:8px 0 32px;display:grid}.volume-range{width:100%;accent-color:var(--accent)}.field-label output{color:var(--fg);font-variant-numeric:tabular-nums;margin-left:6px}.player{border:1px solid var(--line);background:var(--tile);border-radius:12px;min-height:120px;padding:12px}.player:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.score-box{color:var(--fg);overflow-x:auto}.score-box svg{max-width:none;display:block}.score .fig{text-anchor:middle;fill:currentColor;stroke:none;font-family:Georgia,Times New Roman,serif;font-size:13px}.score .deg{text-anchor:middle;fill:var(--accent);stroke:none;font-family:system-ui,Segoe UI Symbol,sans-serif;font-size:15px}.score .hl{fill:var(--accent);opacity:0;transition:opacity 80ms linear}.score .hl.on{opacity:.2}.pl-row{flex-wrap:wrap;align-items:center;gap:8px 14px;margin-top:12px;display:flex}.pl-label{min-width:4.5rem;color:var(--muted);font-size:.85rem;font-weight:600}.pl-inline{color:var(--muted);align-items:center;gap:6px;font-size:.9rem;display:inline-flex}.pl-range{width:150px;accent-color:var(--accent)}.pl-select{border:1px solid var(--line);background:var(--bg);min-height:38px;color:var(--fg);font:inherit;border-radius:10px;padding:4px 10px}.pl-voices{flex-wrap:wrap;gap:8px 22px;margin-top:12px;display:flex}.pl-voice{align-items:center;gap:6px;display:flex}.pl-voice .seg-btn{min-width:0;min-height:34px;padding:2px 10px;font-size:.85rem}.pl-play{justify-content:center;min-width:96px}.pl-status,.pl-note{margin:8px 0 0}
