@font-face{font-family:EB Garamond;src:url(/assets/eb-garamond-roman-latin-CRpggXlh.woff2) format("woff2");font-weight:400 800;font-style:normal;font-display:swap}@font-face{font-family:EB Garamond;src:url(/assets/eb-garamond-italic-latin-AvGrCMCN.woff2) format("woff2");font-weight:400 800;font-style:italic;font-display:swap}:root{--wall: #16100a;--wall-deep: #0e0a05;--wall-soft: #c9b28a;--gold-bright: #d3a94e;--parchment: #f2e8d0;--parchment-deep: #e8d9b8;--ink: #2b2013;--ink-soft: #5a4a32;--ink-raise: #43331d;--line: #8a7048;--gold: #a9812f;--gold-ink: #7a5a1d;--danger: #7a2f22;--danger-bg: #f4e1d8;--card-bg: #faf3e2;--shadow: rgba(43, 32, 19, .25);--font-serif: "EB Garamond", Georgia, "Times New Roman", Times, serif;--font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace;--ease-out: cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background-color:var(--wall-deep);background-image:radial-gradient(120% 90% at 50% 0%,var(--wall) 0%,var(--wall-deep) 78%);background-attachment:fixed;color:var(--ink);font-family:var(--font-serif);font-size:1.125rem;line-height:1.6}::selection{background:var(--parchment-deep);color:var(--ink)}:focus-visible{outline:2px solid var(--gold-ink);outline-offset:2px}.app>header :focus-visible,.buildtag:focus-visible{outline-color:var(--gold-bright)}h1,h2,h3,h4{text-wrap:balance}p{text-wrap:pretty}.app{max-width:1020px;margin:0 auto;padding:0 clamp(.6rem,3vw,2rem) 4.5rem;position:relative;min-height:100vh}.app>header{text-align:center;color:var(--parchment);padding:clamp(1.8rem,5vw,3.2rem) 0 1.6rem}.app h1{margin:0 -.3em 0 0;font-size:clamp(1.8rem,4.5vw,2.9rem);font-weight:500;text-transform:uppercase;letter-spacing:.3em;color:var(--parchment)}.masthead-sub{display:flex;align-items:center;justify-content:center;gap:1rem;margin:.7rem 0 1.3rem;font-style:italic;font-size:1rem;color:var(--wall-soft)}.masthead-sub:before,.masthead-sub:after{content:"";flex:0 1 clamp(1.5rem,8vw,5rem);border-top:1px solid rgba(201,178,138,.4)}.app nav{display:flex;justify-content:center;flex-wrap:wrap;gap:.4rem 1.6rem}.app nav a{color:var(--wall-soft);text-decoration:none;text-transform:uppercase;font-size:.82rem;letter-spacing:.18em;padding:.35rem .1rem .25rem;border-bottom:1px solid transparent;transition:color .18s var(--ease-out),border-color .18s var(--ease-out)}.app nav a:hover{color:var(--parchment)}.app nav a[aria-current=page]{color:var(--parchment);border-bottom-color:var(--gold-bright)}.buildtag{position:fixed;right:.6rem;bottom:.4rem;font-family:var(--font-mono);font-size:.75rem;color:var(--wall-soft);opacity:.8;background:var(--wall-deep);padding:.1rem .4rem;border:1px solid rgba(201,178,138,.35);border-radius:3px}.app>main{position:relative;background-color:var(--parchment);background-image:repeating-linear-gradient(0deg,rgba(138,112,72,.05) 0px,rgba(138,112,72,.05) 1px,transparent 1px,transparent 3px),radial-gradient(140% 120% at 50% 18%,#69523000 55%,#69523029),radial-gradient(ellipse at top,var(--parchment) 0%,var(--parchment-deep) 100%);border:1px solid #3a2c18;border-radius:2px;padding:clamp(1.4rem,4.5vw,3.2rem) clamp(.9rem,4vw,3rem) 3rem;box-shadow:0 30px 80px -20px #000000bf,0 8px 24px #00000073}.app>main:before{content:"";position:absolute;top:7px;right:7px;bottom:7px;left:7px;border:1px solid var(--line);border-radius:1px;opacity:.55;pointer-events:none}.instrument-page h2,.laws-page h2,.sources-page h2,.about-page h2{font-size:1.75rem;font-weight:550;letter-spacing:.01em;border-bottom:4px double var(--line);padding-bottom:.45rem;margin-top:2.2rem}.laws-page h2:first-child,.sources-page h2:first-child,.about-page h2:first-child{margin-top:.4rem}.laws-page h3,.sources-page h3{color:var(--ink);margin-top:2.6rem;font-size:1.35rem;font-weight:500;font-style:italic}.laws-page p,.about-page p{max-width:70ch}.laws-page blockquote,.rule-card blockquote,.provenance-quote{font-style:italic;font-size:1.1em;border:1px solid var(--line);border-radius:2px;margin:.75rem 0 .5rem;padding:.6rem 1.1rem;background:var(--card-bg);max-width:65ch;quotes:"« " " »"}.laws-page blockquote:before,.rule-card blockquote:before,.provenance-quote:before{content:open-quote;color:var(--gold-ink)}.laws-page blockquote:after,.rule-card blockquote:after,.provenance-quote:after{content:close-quote;color:var(--gold-ink)}.citation-page{font-size:.9rem;color:var(--ink-soft);font-variant-numeric:tabular-nums;margin-top:-.1rem}.omission-note{font-size:.9rem;color:var(--ink-soft);border-top:1px dashed var(--line);padding-top:.75rem;margin-top:2.5rem;max-width:70ch}.rule-card{border:1px solid var(--line);border-radius:2px;background:var(--card-bg);padding:.9rem 1.15rem 1rem;margin:.9rem 0}.rule-card h4{margin:0 0 .35rem;font-size:1.12rem;font-weight:600}.badge,.provenance-badge{display:inline-block;background:var(--gold-ink);color:var(--parchment);font-size:.78rem;font-weight:500;text-transform:uppercase;letter-spacing:.08em;padding:.14rem .55rem;border-radius:2px;margin-right:.35rem}.derived-note{font-size:.95rem}.fidelity-policy{border:1px solid var(--gold);background:var(--card-bg);padding:.9rem 1.15rem;border-radius:2px}.about-page>p:first-of-type:first-letter{float:left;font-size:3.6em;line-height:.82;padding:.06em .12em 0 0;font-weight:500;color:var(--gold-ink)}.wheel-wrap{max-width:560px;margin:.5rem auto .4rem;aspect-ratio:1 / 1}[data-ring=mobile],[data-ring=planets],[data-ring=triangles]{touch-action:none;cursor:grab}[data-ring=mobile]:active,[data-ring=planets]:active,[data-ring=triangles]:active{cursor:grabbing}[data-ring=letters] text{paint-order:stroke;stroke:var(--parchment);stroke-width:2.5px;stroke-linejoin:round}.triangle-0{stroke:var(--ink)}.triangle-1{stroke:var(--gold-ink)}.triangle-2{stroke:var(--danger)}.triangle-3{stroke:var(--ink-soft)}.plate-caption{text-align:center;font-style:italic;font-size:.95rem;color:var(--ink-soft);margin:0 auto 2rem;max-width:46ch}.wheel-reading{background:var(--card-bg);border:1px solid var(--line);border-radius:2px;padding:.9rem 1.15rem 1rem;margin-bottom:1.75rem}.wheel-reading h2{margin:0 0 .3rem;font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.12em;border-bottom:none;color:var(--gold-ink)}.wheel-reading-hint{font-style:italic;color:var(--ink-soft);font-size:.95rem;margin-top:.2rem}.wheel-reading ul{list-style:none;padding:0;margin:.5rem 0;font-size:.95rem;max-height:12rem;overflow-y:auto}.wheel-reading li{padding:.2rem 0;border-bottom:1px dotted var(--line)}.chord-read-line{font-family:var(--font-mono);font-size:.85rem}.instrument-page form{display:flex;align-items:baseline;gap:.8rem;flex-wrap:wrap;margin:2rem 0 1.25rem}.instrument-page label{font-style:italic;font-size:1.15rem;color:var(--ink)}.instrument-page input[type=text]{font-family:var(--font-serif);font-size:1.35rem;padding:.2rem .3rem;border:none;border-bottom:1px solid var(--line);border-radius:0;background:transparent;color:var(--ink);flex:1 1 12rem;transition:border-color .18s var(--ease-out),box-shadow .18s var(--ease-out)}.instrument-page input[type=text]:focus-visible{outline:none;border-bottom-color:var(--gold-ink);box-shadow:0 1px 0 var(--gold-ink)}button{font-family:var(--font-serif);font-size:.95rem;letter-spacing:.02em;cursor:pointer;background:transparent;border:1px solid var(--line);border-radius:2px;color:var(--ink);padding:.4rem .9rem;min-height:2rem;transition:background-color .18s var(--ease-out),border-color .18s var(--ease-out),color .18s var(--ease-out),transform .1s var(--ease-out)}button:hover{background:var(--parchment-deep);border-color:var(--ink-soft)}button:active{transform:translateY(1px)}button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--parchment)}.instrument-page form button[type=submit]{background:var(--ink);border-color:var(--ink);color:var(--parchment);padding:.4rem 1.3rem}.instrument-page form button[type=submit]:hover{background:var(--ink-raise);border-color:var(--ink-raise)}.compose-error{background:var(--danger-bg);border:1px solid var(--danger);color:var(--danger);padding:.6rem .9rem;border-radius:2px}.skip-notice{background:var(--card-bg);border:1px dashed var(--line);color:var(--ink-soft);padding:.5rem .9rem;border-radius:2px;font-size:.95rem}.result-panel{margin-top:1.75rem;animation:rise-in .35s var(--ease-out)}.letter-breakdown{display:flex;flex-wrap:wrap;gap:.5rem}.letter-chip{border:1px solid var(--line);border-radius:2px;background:var(--card-bg);padding:.35rem .55rem;display:flex;align-items:center;gap:.25rem;font-size:.95rem}.letter-chip button{background:transparent;border:none;padding:.2rem .3rem;min-height:1.6rem;min-width:1.6rem;text-decoration:underline dotted 1px;text-decoration-color:var(--line);text-underline-offset:3px}.letter-chip button:hover{background:var(--parchment-deep);border-color:transparent;color:var(--ink);text-decoration-color:var(--ink-soft)}.chip-color .swatch,.cell-letter+td .swatch{display:inline-block;width:.9rem;height:.9rem;border-radius:50%;border:1px solid var(--ink);vertical-align:middle}.chip-id{font-weight:700}.chip-mother-tag{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft)}.mode-line{margin-top:1.1rem;font-size:1.05rem}.mode-line button{font-size:1.05rem;font-style:italic}.mode-analysis{margin-left:.4rem;font-style:italic;color:var(--ink-soft);cursor:help}.analysis-lines{margin-top:.35rem}.analysis-line{margin:.15rem 0 0;font-size:.95rem;font-style:italic;color:var(--ink-soft);cursor:help}.chord-function{margin:0 0 .15rem;font-size:.95rem;font-style:italic;color:var(--ink-soft);cursor:help}.chord-wolf{margin:0 0 .15rem;font-size:.85rem;font-variant:small-caps;letter-spacing:.04em;color:var(--danger);cursor:help}.chords-row{display:flex;flex-wrap:wrap;gap:1.25rem;margin-top:1.25rem}.chord-block{text-align:center}.chord-symbol{margin:0 0 .15rem;font-size:1.45rem;font-weight:650;letter-spacing:.01em;color:var(--ink);cursor:help}.chord-symbol-inline{display:block;font-weight:700;font-size:1.05rem;color:var(--ink);cursor:help}.chord-cell-desc{display:block;font-size:.8rem;color:var(--ink-soft);margin-top:.1rem}[data-testid=tab]{font-family:var(--font-mono);background:var(--card-bg);border:1px solid var(--line);border-radius:2px;padding:.6rem .8rem;overflow-x:auto;font-size:.85rem}.play-controls{margin-top:1.1rem;display:flex;align-items:center;flex-wrap:wrap;gap:.75rem}.tuning-toggle,.instrument-toggle{display:flex;gap:.4rem}.phrase-panel{margin-top:1.75rem;border:1px solid var(--line);border-radius:2px;background:var(--card-bg);padding:.9rem 1.15rem 1.15rem;animation:rise-in .35s var(--ease-out)}.phrase-table{border-collapse:collapse;width:100%;font-size:.92rem;font-variant-numeric:tabular-nums;margin-bottom:1rem}.phrase-table th,.phrase-table td{border:1px solid var(--line);padding:.35rem .55rem;text-align:left;vertical-align:top}.phrase-table th{background:var(--parchment-deep);font-weight:600;font-size:.78rem;text-transform:uppercase;letter-spacing:.06em}.phrase-table tbody tr[aria-current=true]{background:var(--parchment-deep)}.phrase-table tbody tr[aria-current=true] td:first-child button{color:var(--gold-ink)}.phrase-table td button{background:transparent;border:none;padding:.2rem .4rem;min-height:1.6rem;font-weight:700;color:var(--ink);text-decoration:underline dotted 1px;text-decoration-color:var(--line);text-underline-offset:3px}.phrase-table td button:hover{background:var(--parchment);border-color:transparent}.phrase-row-error{color:var(--danger);background:var(--danger-bg);font-style:italic;font-size:.88rem}.phrase-progression{display:flex;flex-wrap:wrap;gap:.75rem;margin:1rem 0}.phrase-progression-group{display:flex;flex-direction:column;gap:.3rem;border:1px solid var(--line);border-radius:2px;background:var(--parchment);padding:.45rem .65rem .55rem;max-width:100%}.phrase-progression-word{font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--gold-ink)}.phrase-progression-chord{display:flex;flex-direction:column;gap:.05rem;font-size:.88rem;border:1px solid var(--line);border-radius:2px;background:var(--card-bg);padding:.25rem .55rem .35rem;width:fit-content;max-width:100%}.phrase-progression-error{font-size:.88rem;font-style:italic;color:var(--danger)}.phrase-disclosure{font-size:.9rem;font-style:italic;color:var(--ink-soft);margin-top:1rem;max-width:75ch}.table-scroll{overflow-x:auto}.canon-table,.series-table{border-collapse:collapse;width:100%;font-size:.92rem;font-variant-numeric:tabular-nums}.canon-table caption,.series-table caption{text-align:left;font-weight:600;font-style:italic;font-size:1.02rem;padding-bottom:.3rem}.canon-table th,.canon-table td,.series-table th,.series-table td{border:1px solid var(--line);padding:.35rem .55rem;text-align:left}.canon-table th,.series-table th{background:var(--parchment-deep);font-weight:600;font-size:.78rem;text-transform:uppercase;letter-spacing:.06em}.canon-table .swatch{display:inline-block;width:.8rem;height:.8rem;border-radius:50%;border:1px solid var(--ink);margin-right:.3rem;vertical-align:middle}.cell-citations{display:flex;flex-wrap:wrap;gap:.25rem}.citation-chip{font-size:.8rem;padding:.2rem .5rem;min-height:1.6rem}.citation-chip[data-derived=true]{border-style:dashed}.bibliography{margin-top:2rem}.bibliography a,.sources-page a,.about-page a{color:var(--gold-ink);text-decoration-color:var(--line);text-underline-offset:3px}.enharmonic-list{padding-left:1.25rem}.provenance-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0e0a0599;display:flex;align-items:center;justify-content:center;z-index:100;animation:fade-in .18s var(--ease-out)}.provenance-popover{position:relative;max-width:32rem;width:90%;max-height:80vh;overflow-y:auto;background:var(--parchment);border:1px solid var(--gold-ink);border-radius:2px;padding:1.4rem 1.6rem 1.5rem;box-shadow:inset 0 0 0 4px var(--parchment),inset 0 0 0 5px var(--line),0 1.5rem 3rem #0000008c;animation:pop-in .22s var(--ease-out)}.provenance-close{position:absolute;top:.45rem;right:.5rem;border:none;background:transparent;font-size:1.3rem;line-height:1;padding:.3rem .55rem;min-height:1.7rem;min-width:1.7rem}.provenance-page{font-size:.9rem;color:var(--ink-soft);font-variant-numeric:tabular-nums}.provenance-popover a{color:var(--gold-ink);text-decoration-color:var(--line);text-underline-offset:3px}@keyframes rise-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes pop-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
