:root{--ink-ivory: #f6f1e7;--ink-cream: #efe8d8;--ink-paper: #fbf7ed;--ink-black: #1a1612;--ink-muted: #5a524a;--ink-faint: #b5ab9c;--ink-hairline: #2b2620;--ink-burgundy: #6b1f2e;--ink-burgundy-deep: #4a131f;--ink-blue: #1a3a5c;--ink-blue-deep: #0f2640;--ink-gold: #b08740;--font-display: "Cormorant Garamond", "Cormorant", "Baskerville", "Georgia", serif;--font-ui: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-musical: "Bravura Text", "Noto Music", "Cambria Math", serif;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.25rem;--text-xl: 1.5rem;--text-2xl: 2rem;--text-3xl: 2.75rem;--text-4xl: 4rem;--text-hero: 6rem;--s-1: .25rem;--s-2: .5rem;--s-3: .75rem;--s-4: 1rem;--s-6: 1.5rem;--s-8: 2rem;--s-12: 3rem;--s-16: 4rem;--s-24: 6rem;--ease-confident: cubic-bezier(.22, 1, .36, 1);--dur-slow: .7s;--dur-medium: .4s;--dur-fast: .2s;--hairline: 1px;--radius-sm: 2px;--radius-md: 4px}@media(prefers-color-scheme:dark){:root{--ink-ivory: #141018;--ink-cream: #1f1920;--ink-paper: #0f0b13;--ink-black: #e8e0d2;--ink-muted: #9e9586;--ink-faint: #5a524a;--ink-hairline: #d6cebf;--ink-burgundy: #c27a88;--ink-burgundy-deep: #a45a68;--ink-blue: #7ea2cc;--ink-blue-deep: #5e82ac;--ink-gold: #d4a85c}}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-family:var(--font-ui);font-size:16px;line-height:1.55;color:var(--ink-black);background:var(--ink-ivory);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{min-height:100vh;min-height:100dvh}h1,h2,h3,h4{font-family:var(--font-display);font-weight:500;line-height:1.1;letter-spacing:-.01em;color:var(--ink-black)}h1{font-size:var(--text-hero);font-weight:600;letter-spacing:-.03em}h2{font-size:var(--text-3xl)}h3{font-size:var(--text-2xl)}h4{font-size:var(--text-xl)}p{font-size:var(--text-base);color:var(--ink-black)}small,.t-meta{font-size:var(--text-sm);color:var(--ink-muted)}em{font-family:var(--font-display);font-style:italic}a{color:var(--ink-burgundy);text-decoration:none;border-bottom:1px solid transparent;transition:border-color var(--dur-fast) var(--ease-confident),color var(--dur-fast) var(--ease-confident)}a:hover{border-bottom-color:currentColor}button{font-family:var(--font-ui);font-size:var(--text-base);color:var(--ink-black);background:transparent;border:var(--hairline) solid var(--ink-hairline);padding:var(--s-2) var(--s-6);cursor:pointer;letter-spacing:.02em;transition:background var(--dur-medium) var(--ease-confident),color var(--dur-medium) var(--ease-confident),border-color var(--dur-medium) var(--ease-confident)}button:hover{background:var(--ink-black);color:var(--ink-ivory);border-color:var(--ink-black)}:focus-visible{outline:2px solid var(--ink-burgundy);outline-offset:3px}::selection{background:var(--ink-burgundy);color:var(--ink-ivory)}.app-root{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}.app-header{display:flex;justify-content:space-between;align-items:center;padding:var(--s-4) var(--s-6);border-bottom:var(--hairline) solid color-mix(in srgb,var(--ink-hairline) 30%,transparent);max-width:1100px;margin:0 auto;width:100%}.app-brand{font-family:var(--font-display);font-weight:600;font-size:var(--text-xl);letter-spacing:-.02em;color:var(--ink-black);background:transparent;border:none;padding:0;cursor:pointer}.app-brand:hover{background:transparent;color:var(--ink-burgundy)}.app-nav{display:flex;align-items:center;gap:var(--s-4)}.locale-toggle{display:inline-flex;align-items:center;gap:var(--s-1);font-family:var(--font-ui);font-size:var(--text-xs);letter-spacing:.18em}.locale-toggle .locale-btn,.locale-toggle .locale-btn:hover,.locale-toggle .locale-btn:focus-visible{background:transparent;border:none;padding:var(--s-1) var(--s-2);font-family:inherit;font-size:inherit;letter-spacing:inherit;text-transform:uppercase;color:var(--ink-faint);cursor:pointer;transition:color var(--dur-fast) var(--ease-confident)}.locale-toggle .locale-btn.active{color:var(--ink-black)}.locale-toggle .locale-btn:hover:not(.active){color:var(--ink-muted)}.locale-toggle .locale-sep{color:var(--ink-faint);-webkit-user-select:none;user-select:none}.btn-ghost{background:transparent;border:var(--hairline) solid transparent;font-family:var(--font-ui);font-size:var(--text-sm);color:var(--ink-muted);padding:var(--s-1) var(--s-3);cursor:pointer;letter-spacing:.03em;transition:color var(--dur-fast) var(--ease-confident),background var(--dur-fast) var(--ease-confident)}.btn-ghost:hover{background:transparent;color:var(--ink-black);border-color:transparent}.btn-primary{font-family:var(--font-ui);font-size:var(--text-base);color:var(--ink-ivory);background:var(--ink-black);border:var(--hairline) solid var(--ink-black);padding:var(--s-3) var(--s-6);cursor:pointer;letter-spacing:.04em;transition:background var(--dur-medium) var(--ease-confident),border-color var(--dur-medium) var(--ease-confident)}.btn-primary:hover:not(:disabled){background:var(--ink-burgundy);border-color:var(--ink-burgundy);color:var(--ink-ivory)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.coming-soon{display:grid;place-items:center;flex:1;padding:var(--s-12) var(--s-4)}.coming-soon-card{max-width:36rem;width:100%;text-align:center;display:flex;flex-direction:column;gap:var(--s-4);align-items:center}.coming-soon-eyebrow{font-family:var(--font-ui);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.28em;color:var(--ink-faint);margin:0}.coming-soon-headline{font-family:var(--font-display);font-size:clamp(var(--text-3xl),6vw,var(--text-hero));font-weight:500;letter-spacing:-.02em;line-height:1;color:var(--ink-black);margin:0}.coming-soon-body{font-family:var(--font-display);font-style:italic;font-size:var(--text-lg);color:var(--ink-muted);max-width:28rem;line-height:1.5;margin:0}.coming-soon .btn-ghost{margin-top:var(--s-4);border:var(--hairline) solid var(--ink-hairline);padding:var(--s-2) var(--s-6)}.auth-page{display:grid;place-items:center;flex:1;padding:var(--s-8) var(--s-4)}.auth-form{max-width:24rem;width:100%;display:flex;flex-direction:column;gap:var(--s-6)}.auth-form h2{font-family:var(--font-display);font-size:var(--text-3xl);font-weight:500;text-align:center}.auth-form form{display:flex;flex-direction:column;gap:var(--s-4)}.field{display:flex;flex-direction:column;gap:var(--s-2)}.field span{font-family:var(--font-ui);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.15em;color:var(--ink-muted)}.field input{font-family:var(--font-ui);font-size:var(--text-base);padding:var(--s-3);border:var(--hairline) solid var(--ink-hairline);background:var(--ink-paper);color:var(--ink-black);transition:border-color var(--dur-fast) var(--ease-confident)}.field input:focus{outline:none;border-color:var(--ink-burgundy)}.field-password{position:relative}.field-password input{width:100%;padding-right:calc(var(--s-8) + var(--s-2))}.password-toggle,.password-toggle:hover,.password-toggle:focus-visible{position:absolute;right:var(--s-2);top:50%;transform:translateY(-50%);background:transparent;border:none;padding:var(--s-1) var(--s-2);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-muted);transition:color var(--dur-fast) var(--ease-confident)}.password-toggle:hover{color:var(--ink-black)}.field-hint{font-family:var(--font-ui);font-size:var(--text-xs);color:var(--ink-muted);letter-spacing:.03em;margin-top:calc(var(--s-1) * -1)}.auth-error{color:var(--ink-burgundy);font-family:var(--font-display);font-style:italic;font-size:var(--text-base);text-align:center;margin:0}.auth-success{color:var(--ink-black);font-family:var(--font-display);font-size:var(--text-base);line-height:1.55;text-align:center;margin:0 0 var(--s-3) 0}.reset-body{color:var(--ink-black);font-family:var(--font-display);font-size:var(--text-base);line-height:1.55;margin:0 0 var(--s-3) 0}.btn-link{background:none;border:0;padding:0;color:var(--ink-blue);font-family:var(--font-display);font-style:italic;font-size:var(--text-sm);cursor:pointer;text-decoration:underline;text-underline-offset:.2em;text-align:center}.btn-link:hover{color:var(--ink-burgundy)}.auth-actions{display:flex;flex-direction:column;gap:var(--s-3);align-items:stretch;margin-top:var(--s-2)}.header-auth{display:inline-flex;align-items:center;gap:var(--s-1)}.header-sep{color:var(--ink-faint);font-family:var(--font-display);-webkit-user-select:none;user-select:none}.legal-footer{margin-top:auto;padding:var(--s-6) var(--s-4);border-top:var(--hairline) solid color-mix(in srgb,var(--ink-hairline) 30%,transparent);text-align:center;font-family:var(--font-display);font-style:italic;font-size:var(--text-sm);color:var(--ink-muted)}.legal-footer .legal-link{color:var(--ink-muted);text-decoration:none;border-bottom:var(--hairline) solid transparent;transition:color var(--dur-fast) var(--ease-confident),border-color var(--dur-fast) var(--ease-confident)}.legal-footer .legal-link:hover{color:var(--ink-black);border-bottom-color:var(--ink-hairline)}.legal-footer .legal-sep{color:var(--ink-faint);-webkit-user-select:none;user-select:none;margin:0 var(--s-1)}.legal-page{flex:1;padding:var(--s-8) var(--s-4);max-width:44rem;width:100%;margin:0 auto}.legal-article{font-family:var(--font-display);color:var(--ink-black);line-height:1.65}.legal-title{font-family:var(--font-display);font-size:clamp(var(--text-3xl),5vw,var(--text-hero));font-weight:500;letter-spacing:-.02em;line-height:1.05;margin:0 0 var(--s-2) 0}.legal-updated{font-style:italic;color:var(--ink-muted);font-size:var(--text-sm);margin:0 0 var(--s-6) 0}.legal-article p{font-size:var(--text-base);margin:0 0 var(--s-4) 0}.legal-section-h{font-family:var(--font-display);font-size:var(--text-xl);font-weight:500;letter-spacing:-.01em;margin:var(--s-6) 0 var(--s-3) 0;color:var(--ink-black)}.legal-list{margin:0 0 var(--s-4) var(--s-6);padding:0}.legal-list li{font-size:var(--text-base);margin-bottom:var(--s-1)}.legal-article a{color:var(--ink-blue);text-decoration:underline;text-underline-offset:.2em}.legal-article a:hover{color:var(--ink-burgundy)}.legal-article code{font-family:var(--font-ui);font-size:.9em;padding:.1em .35em;background:color-mix(in srgb,var(--ink-hairline) 20%,transparent);border-radius:2px}.account-page{flex:1;padding:var(--s-8) var(--s-4);max-width:36rem;width:100%;margin:0 auto;display:flex;flex-direction:column;gap:var(--s-6)}.account-title{font-family:var(--font-display);font-size:clamp(var(--text-3xl),5vw,var(--text-hero));font-weight:500;letter-spacing:-.02em;margin:0}.account-identity{font-family:var(--font-display);font-style:italic;color:var(--ink-muted);margin:0}.account-section{display:flex;flex-direction:column;gap:var(--s-3);padding-top:var(--s-6);border-top:var(--hairline) solid color-mix(in srgb,var(--ink-hairline) 30%,transparent)}.account-section h2{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:500;margin:0}.account-body{font-family:var(--font-display);font-style:italic;color:var(--ink-muted);line-height:1.55;margin:0}.account-section-danger h2{color:var(--ink-burgundy)}.field-check{flex-direction:row;align-items:flex-start;gap:var(--s-2)}.field-check input{margin-top:.2em}.field-check span{font-family:var(--font-display);font-style:italic;font-size:var(--text-base);color:var(--ink-black);text-transform:none;letter-spacing:0}.btn-danger{font-family:var(--font-ui);font-size:var(--text-base);color:var(--ink-ivory);background:var(--ink-burgundy);border:var(--hairline) solid var(--ink-burgundy);padding:var(--s-3) var(--s-6);cursor:pointer;letter-spacing:.04em;transition:background var(--dur-medium) var(--ease-confident),border-color var(--dur-medium) var(--ease-confident)}.btn-danger:hover:not(:disabled){background:color-mix(in srgb,var(--ink-burgundy) 75%,black);border-color:color-mix(in srgb,var(--ink-burgundy) 75%,black)}.btn-danger:disabled{opacity:.5;cursor:not-allowed}.landing{min-height:100vh;min-height:100dvh;display:grid;grid-template-rows:auto 1fr auto;padding:var(--s-8) var(--s-6);max-width:1100px;margin:0 auto}.landing-header{text-align:center;padding-top:var(--s-12);padding-bottom:var(--s-8)}.landing-title{font-size:clamp(var(--text-3xl),10vw,var(--text-hero));font-weight:600;letter-spacing:-.04em;line-height:.95;color:var(--ink-black);margin-bottom:var(--s-3)}.landing-subtitle{font-family:var(--font-display);font-style:italic;font-size:clamp(var(--text-base),2.5vw,var(--text-lg));color:var(--ink-muted);max-width:30rem;margin:0 auto;line-height:1.4}.landing-footer{text-align:center;padding-top:var(--s-12);padding-bottom:var(--s-4)}.landing-meta{font-size:var(--text-sm);color:var(--ink-faint);letter-spacing:.05em}.compass{display:block;margin:0 auto;max-width:min(560px,90vw);color:var(--ink-black)}.compass svg{display:block;width:100%;height:auto;transition:transform var(--dur-slow) var(--ease-confident)}.compass:hover svg{transform:rotate(3deg)}.compass-cardinal{cursor:pointer;text-decoration:none;outline-offset:4px}.compass-cardinal .compass-label,.compass-cardinal .compass-label-sub{transition:fill var(--dur-fast) var(--ease-confident)}.compass-cardinal:hover .compass-label,.compass-cardinal:focus-visible .compass-label{fill:var(--ink-burgundy)}.compass-cardinal:hover .compass-label-sub,.compass-cardinal:focus-visible .compass-label-sub{fill:var(--ink-burgundy)}.compass-label{font-family:var(--font-display);font-size:26px;font-weight:500;letter-spacing:.01em;fill:var(--ink-black)}.compass-label-sub{font-family:var(--font-ui);font-size:11px;letter-spacing:.22em;text-transform:uppercase;fill:var(--ink-muted)}.compass-cardinal{font-family:var(--font-ui);font-size:13px;font-weight:500;letter-spacing:.2em;fill:var(--ink-muted)}.compass-center-text{font-family:var(--font-display);font-style:italic;font-size:22px;fill:var(--ink-burgundy)}@font-face{font-family:Bravura Text;src:url(/fonts/BravuraText.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}.scale-page{max-width:72ch;margin:0 auto;padding:var(--s-12) clamp(var(--s-2),3vw,var(--s-4)) var(--s-16)}.scale-header{text-align:center;margin-bottom:var(--s-8)}.scale-eyebrow{font-family:var(--font-ui);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.28em;color:var(--ink-faint);margin-bottom:var(--s-3)}.scale-title-row{display:flex;align-items:center;justify-content:center;gap:var(--s-6);flex-wrap:wrap;margin-bottom:var(--s-4)}.scale-title{font-family:var(--font-display);font-size:clamp(var(--text-3xl),8vw,5rem);font-weight:500;letter-spacing:-.02em;line-height:1;color:var(--ink-black);margin:0}.scale-staff{display:block;width:110px;flex-shrink:0;height:auto;color:var(--ink-black)}.staff-clef{font-family:var(--font-musical);font-size:55px;fill:currentColor}.staff-accidental{font-family:var(--font-musical);font-size:22px;fill:var(--ink-burgundy)}.scale-meta{display:flex;flex-direction:column;align-items:center;gap:var(--s-1);margin-top:var(--s-4)}.scale-key-sig,.scale-formula{font-family:var(--font-display);font-style:italic;font-size:var(--text-lg);color:var(--ink-muted);line-height:1.4}.scale-key-sig .scale-letter{font-style:normal;letter-spacing:.02em;margin-right:1px}.scale-key-sig .scale-glyph,.scale-pill-accidental{font-family:var(--font-musical);font-style:normal;line-height:1}.scale-sep{margin:0 var(--s-3);color:var(--ink-faint);font-style:normal}.scale-formula-bar{margin:0 var(--s-2);color:var(--ink-faint);font-style:normal}.scale-pickers{display:flex;flex-direction:column;align-items:center;gap:var(--s-2);margin:var(--s-8) 0 var(--s-6)}.scale-picker{text-align:center}.scale-picker-eyebrow{font-family:var(--font-ui);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.28em;color:var(--ink-faint);margin:0 0 var(--s-1)}.scale-picker-row{display:flex;flex-wrap:wrap;justify-content:center;align-items:baseline;gap:var(--s-1) var(--s-2)}.scale-picker-row .scale-picker-option,.scale-picker-row .scale-picker-option:hover,.scale-picker-row .scale-picker-option:focus-visible{font-family:var(--font-display);font-style:italic;font-size:var(--text-lg);font-weight:500;color:var(--ink-muted);background:transparent;border:none;padding:0 var(--s-1);cursor:pointer;letter-spacing:.01em;transition:color var(--dur-fast) var(--ease-confident),border-color var(--dur-fast) var(--ease-confident)}.scale-picker-row .scale-picker-option:hover,.scale-picker-row .scale-picker-option:focus-visible{color:var(--ink-black)}.scale-picker-row .scale-picker-option.active{color:var(--ink-black);font-style:normal;border-bottom:var(--hairline) solid var(--ink-burgundy)}.scale-picker-sep{color:var(--ink-faint);-webkit-user-select:none;user-select:none}.scale-picker--timbre .scale-picker-row .scale-picker-option,.scale-picker--timbre .scale-picker-row .scale-picker-option:hover,.scale-picker--timbre .scale-picker-row .scale-picker-option:focus-visible{font-family:var(--font-ui);font-style:normal;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.22em;color:var(--ink-faint)}.scale-picker--timbre .scale-picker-row .scale-picker-option:hover,.scale-picker--timbre .scale-picker-row .scale-picker-option:focus-visible{color:var(--ink-muted)}.scale-picker--timbre .scale-picker-row .scale-picker-option.active{color:var(--ink-burgundy);border-bottom:none}.scale-pills{container-type:inline-size;display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:center;gap:clamp(1px,.4cqw,var(--s-1));margin:var(--s-12) 0 var(--s-8)}.scale-pill{display:flex;flex-direction:column;align-items:center;gap:clamp(2px,1.2cqw,var(--s-2));flex:1 1 0;min-width:0;cursor:default}.scale-pill-degree{font-family:var(--font-ui);font-size:clamp(.55rem,1.3cqw,var(--text-xs));letter-spacing:.15em;color:var(--ink-faint);text-transform:uppercase}.scale-pill-note{container-type:inline-size;aspect-ratio:1 / 1;position:relative;display:flex;align-items:center;justify-content:center;width:100%;border:var(--hairline) solid var(--ink-hairline);border-radius:50%;background:var(--ink-paper);transition:background var(--dur-fast) var(--ease-confident),border-color var(--dur-fast) var(--ease-confident),transform var(--dur-medium) var(--ease-confident)}.scale-pill-note:hover{background:var(--ink-cream);border-color:var(--ink-black);transform:translateY(-2px)}.scale-pill-active .scale-pill-note{border-color:var(--ink-burgundy);background:var(--ink-cream);transform:translateY(-2px) scale(1.05);box-shadow:0 4px 12px color-mix(in srgb,var(--ink-burgundy) 18%,transparent)}.scale-pill-active .scale-pill-letter{color:var(--ink-burgundy)}.scale-pill-letter{font-family:var(--font-display);font-size:clamp(.8rem,48cqw,2.75rem);font-weight:500;color:var(--ink-black);line-height:1}.scale-pill-accidental{position:absolute;top:14%;right:16%;font-family:var(--font-musical);font-size:clamp(.6rem,32cqw,2rem);color:var(--ink-burgundy);line-height:1}.scale-step{display:flex;align-items:center;justify-content:center;font-family:var(--font-ui);font-size:clamp(.55rem,2.2cqw,1.75rem);font-weight:500;letter-spacing:.2em;color:var(--ink-faint);min-width:clamp(.6rem,4cqw,3rem);text-transform:uppercase}.scale-step-half{color:var(--ink-burgundy)}.scale-pedagogy{max-width:52ch;margin:var(--s-12) auto 0;padding-top:var(--s-8);border-top:var(--hairline) solid color-mix(in srgb,var(--ink-hairline) 40%,transparent)}.scale-pedagogy p{font-family:var(--font-display);font-size:var(--text-lg);line-height:1.65;color:var(--ink-black)}
