:root{--color-bg: #faf8f5;--color-surface: #ffffff;--color-text: #2c1810;--color-text-secondary: #6b5b4f;--color-accent: #8b1a1a;--color-accent-hover: #a02020;--color-border: #e0d6cc;--color-border-light: #f0ebe5;--font-body: "Palatino Linotype", "Book Antiqua", Palatino, Georgia, serif;--font-heading: "Palatino Linotype", "Book Antiqua", Palatino, Georgia, serif;--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--space-xxl: 2.5rem;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--max-width: 960px}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:var(--font-body);font-size:16px;line-height:1.6;color:var(--color-text);background-color:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);line-height:1.3;margin-top:0}a{color:var(--color-accent);text-decoration:none}a:hover{color:var(--color-accent-hover);text-decoration:underline}img{max-width:100%}.header{background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:var(--space-md) var(--space-lg)}.header__inner{max-width:var(--max-width);margin:0 auto;display:flex;align-items:center;justify-content:space-between}.header__brand{display:flex;align-items:baseline;gap:var(--space-sm);text-decoration:none;color:inherit}.header__brand:hover{text-decoration:none;color:inherit}.header__title{font-size:1.5rem;margin:0;color:var(--color-accent);font-style:italic}.header__subtitle{font-size:.85rem;color:var(--color-text-secondary)}.header__nav{display:flex;gap:var(--space-lg)}.header__link{font-size:.95rem;color:var(--color-text-secondary)}.header__link:hover{color:var(--color-accent);text-decoration:none}.page-container{max-width:var(--max-width);margin:0 auto;padding:var(--space-xl) var(--space-lg)}.home-page__hero{text-align:center;margin-bottom:var(--space-2xl)}.home-page__hero h2{font-size:2rem;font-style:italic;color:var(--color-accent);margin-bottom:var(--space-sm)}.home-page__hero p{color:var(--color-text-secondary);max-width:600px;margin:0 auto}.home-page__section{margin-bottom:var(--space-2xl)}.home-page__section-title{font-size:1.2rem;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--color-border);padding-bottom:var(--space-sm);margin-bottom:var(--space-lg)}.chant-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-lg)}.chant-card{display:block;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-lg);text-decoration:none;color:inherit;transition:border-color .2s,box-shadow .2s}.chant-card:hover{border-color:var(--color-accent);box-shadow:0 2px 8px #8b1a1a1a;text-decoration:none;color:inherit}.chant-card__category{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);margin-bottom:var(--space-xs)}.chant-card__title{font-size:1.25rem;margin:0 0 var(--space-xs);color:var(--color-accent)}.chant-card__mode{font-size:.85rem;color:var(--color-text-secondary);font-style:italic;margin-bottom:var(--space-sm)}.chant-card__description{font-size:.9rem;color:var(--color-text-secondary);margin:0;line-height:1.5}.chant-detail__back{font-size:.9rem;display:inline-block;margin-bottom:var(--space-md)}.chant-detail__title{font-size:2rem;font-style:italic;color:var(--color-accent);margin-bottom:var(--space-sm)}.chant-detail__description{color:var(--color-text-secondary);margin-bottom:var(--space-lg)}.chant-detail__notation{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-xl);margin:var(--space-xl) 0;overflow-x:auto}.chant-detail__actions{margin-top:var(--space-xl);text-align:center}.chant-metadata{display:flex;gap:var(--space-xl);flex-wrap:wrap}.chant-metadata__item{display:flex;flex-direction:column}.chant-metadata__label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary)}.chant-metadata__value{font-size:.95rem}.chant-renderer{min-height:100px;width:100%}.chant-renderer--loading{display:flex;align-items:center;justify-content:center}.chant-renderer__loading{color:var(--color-text-secondary);font-style:italic}.chant-renderer--error{color:var(--color-accent);padding:var(--space-md)}.chant-renderer svg{display:block;max-width:100%}.practice-page__back{font-size:.9rem;display:inline-block;margin-bottom:var(--space-md)}.practice-page__title{font-size:1.5rem;margin-bottom:var(--space-lg)}.practice-page__notation{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-xl);margin-bottom:var(--space-xl);overflow-x:auto}.practice-page__controls{background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:var(--radius-md);padding:var(--space-xl);text-align:center}.practice-page__placeholder{color:var(--color-text-secondary);font-style:italic}.about-page h2{font-size:2rem;font-style:italic;color:var(--color-accent);margin-bottom:var(--space-xl)}.about-page__section{margin-bottom:var(--space-xl)}.about-page__section h3{font-size:1.2rem;margin-bottom:var(--space-sm)}.about-page__section p,.about-page__section ol{color:var(--color-text-secondary);line-height:1.7}.about-page__section ol{padding-left:var(--space-xl)}.about-page__section li{margin-bottom:var(--space-sm)}.btn{display:inline-block;padding:var(--space-sm) var(--space-xl);border-radius:var(--radius-md);font-family:var(--font-body);font-size:1rem;text-decoration:none;cursor:pointer;border:none;transition:background-color .2s}.btn--primary{background-color:var(--color-accent);color:#fff}.btn--primary:hover{background-color:var(--color-accent-hover);color:#fff;text-decoration:none}.btn--secondary{background-color:transparent;color:var(--color-text-secondary);border:1px solid var(--color-border)}.btn--secondary:hover{background-color:var(--color-bg);color:var(--color-text)}.mic-button-wrapper{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm)}.mic-button{position:relative;width:56px;height:56px;border-radius:50%;border:2px solid var(--color-border);background:var(--color-surface);color:var(--color-text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.mic-button:hover{border-color:var(--color-accent);color:var(--color-accent)}.mic-button--active{border-color:#2d8a4e;background:#e8f5e9;color:#2d8a4e}.mic-button--denied{border-color:#ccc;color:#aaa;cursor:not-allowed;opacity:.6}.mic-button__icon{flex-shrink:0}.mic-button__pulse{position:absolute;inset:-4px;border-radius:50%;border:2px solid #2d8a4e;animation:mic-pulse 1.5s ease-out infinite}@keyframes mic-pulse{0%{transform:scale(1);opacity:.6}to{transform:scale(1.4);opacity:0}}.mic-button__error{color:#c62828;font-size:.85rem;text-align:center;max-width:240px;margin:0}.pitch-indicator{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);background:var(--color-surface);border-radius:var(--radius-md);border:1px solid var(--color-border)}.pitch-indicator__labels{display:flex;justify-content:space-between;font-size:.8rem;color:var(--color-text-secondary)}.pitch-indicator__label--center{font-weight:600;color:var(--color-text)}.pitch-indicator__track{position:relative;height:32px;border-radius:16px;overflow:hidden;display:flex;background:#e0e0e0}.pitch-indicator__zone{flex:1}.pitch-indicator__zone--red-left{background:linear-gradient(to right,#ef5350,#ff8a65)}.pitch-indicator__zone--yellow-left{background:linear-gradient(to right,#ff8a65,#ffee58)}.pitch-indicator__zone--green{background:linear-gradient(to right,#66bb6a,#43a047,#66bb6a);flex:.8}.pitch-indicator__zone--yellow-right{background:linear-gradient(to right,#ffee58,#ff8a65)}.pitch-indicator__zone--red-right{background:linear-gradient(to right,#ff8a65,#ef5350)}.pitch-indicator__center-line{position:absolute;left:50%;top:0;bottom:0;width:2px;background:#0000004d;transform:translate(-50%)}.pitch-indicator__needle{position:absolute;top:50%;width:4px;height:40px;background:#333;border-radius:2px;transform:translate(-50%,-50%);transition:left .08s linear;opacity:.3}.pitch-indicator__needle--active{opacity:1;background:#1a1a1a;box-shadow:0 0 6px #0000004d}.pitch-indicator__readout{display:flex;justify-content:center;gap:var(--space-lg);font-size:.9rem}.pitch-indicator__hz{color:var(--color-text);font-weight:600;font-variant-numeric:tabular-nums}.pitch-indicator__cents{color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.pitch-indicator--correct .pitch-indicator__cents{color:#2d8a4e}.pitch-indicator--flat .pitch-indicator__cents,.pitch-indicator--sharp .pitch-indicator__cents{color:#e65100}.pitch-indicator__hint{color:var(--color-text-secondary);font-style:italic}.calibration-dialog{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.calibration-dialog__card{background:var(--color-surface);border-radius:var(--radius-lg);padding:var(--space-xl) var(--space-xxl);max-width:400px;width:90%;text-align:center;box-shadow:0 8px 32px #0003}.calibration-dialog__title{font-family:var(--font-heading);color:var(--color-accent);margin-bottom:var(--space-md)}.calibration-dialog__instruction{color:var(--color-text-secondary);margin-bottom:var(--space-lg)}.calibration-dialog__visualizer{position:relative;width:120px;height:120px;margin:0 auto var(--space-lg);display:flex;align-items:center;justify-content:center}.calibration-dialog__pulse-ring{position:absolute;inset:0;border-radius:50%;border:3px solid var(--color-accent);animation:calibration-pulse 1.5s ease-in-out infinite}@keyframes calibration-pulse{0%,to{transform:scale(.9);opacity:.5}50%{transform:scale(1.1);opacity:1}}.calibration-dialog__frequency{font-size:1.4rem;font-weight:700;color:var(--color-text);font-variant-numeric:tabular-nums}.calibration-dialog__progress{height:6px;background:var(--color-bg);border-radius:3px;overflow:hidden;margin-bottom:var(--space-md)}.calibration-dialog__progress-bar{height:100%;background:var(--color-accent);border-radius:3px;transition:width .15s linear}.calibration-dialog__status{color:var(--color-text-secondary);font-size:.9rem;margin-bottom:var(--space-md)}.calibration-dialog__status--error{color:#c62828}.calibration-dialog__status--success{color:#2d8a4e;font-weight:600;font-size:1rem}.calibration-dialog__hint{color:var(--color-text-secondary);font-size:.85rem;line-height:1.5;margin-bottom:var(--space-md)}.calibration-dialog__success{margin-bottom:var(--space-md)}.calibration-dialog__actions{display:flex;justify-content:center;gap:var(--space-md);margin-top:var(--space-md)}.practice-page__audio-section{display:flex;flex-direction:column;gap:var(--space-lg);padding:var(--space-md) 0}.practice-page__audio-controls{display:flex;align-items:center;justify-content:center;gap:var(--space-xl);padding:var(--space-md);background:var(--color-surface);border-radius:var(--radius-md);border:1px solid var(--color-border)}.practice-page__calibrate-btn{font-size:.85rem}.practice-page__calibration-info{font-size:.85rem;color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.practice-page__feedback-panel{display:flex;align-items:center;justify-content:center;gap:var(--space-xl);padding:var(--space-md) var(--space-lg);background:var(--color-surface);border:2px solid var(--color-border);border-radius:var(--radius-md);margin-bottom:var(--space-md);min-height:80px;transition:border-color .15s,background-color .15s}.practice-page__feedback-panel--correct{border-color:#4caf5099;background:#4caf500d}.practice-page__feedback-panel--flat{border-color:#2196f380;background:#2196f308}.practice-page__feedback-panel--sharp{border-color:#f4433680;background:#f4433608}.practice-page__feedback-panel--pause{border-color:#9e9e9e66;background:#9e9e9e0d}.practice-page__feedback-note--pause{color:#999!important;font-style:italic}.practice-page__expected,.practice-page__detected{display:flex;flex-direction:column;align-items:center;min-width:80px}.practice-page__feedback-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);margin-bottom:2px}.practice-page__feedback-note{font-size:1.5rem;font-weight:700;color:var(--color-accent);line-height:1}.practice-page__feedback-hz{font-size:.8rem;color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.practice-page__accuracy{display:flex;flex-direction:column;align-items:center;min-width:120px;min-height:48px;justify-content:center}.practice-page__accuracy-label{font-size:1.2rem;font-weight:700;line-height:1.2;height:1.5em;display:flex;align-items:center}.practice-page__accuracy-label--correct{color:#2d8a4e}.practice-page__accuracy-label--flat{color:#1565c0}.practice-page__accuracy-label--sharp{color:#c62828}.practice-page__accuracy-label--none{color:var(--color-text-secondary);font-weight:400;font-style:italic;font-size:.95rem}.practice-page__accuracy-cents{font-size:.85rem;color:var(--color-text-secondary);font-variant-numeric:tabular-nums;height:1.2em}.practice-page__feedback-syllable{font-size:1.1rem;font-style:italic;color:var(--color-text-secondary);min-width:60px;text-align:center}.practice-page__step-controls{display:flex;align-items:center;justify-content:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md)}.practice-page__step-controls .btn:disabled{opacity:.4;cursor:not-allowed}.practice-page__note-counter{font-size:.9rem;color:var(--color-text-secondary);font-variant-numeric:tabular-nums;min-width:80px;text-align:center}.practice-page__progress{height:6px;background:var(--color-border);border-radius:3px;overflow:hidden}.practice-page__progress-bar{height:100%;background:var(--color-accent);border-radius:3px;transition:width .2s ease}.practice-page__complete{text-align:center;padding:var(--space-lg);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md)}.practice-page__complete p{color:var(--color-text-secondary);margin-bottom:var(--space-md)}.practice-page__mode-btn{font-size:.85rem;padding:var(--space-xs) var(--space-md)}.practice-page__controls-divider{width:1px;height:24px;background:var(--color-border);margin:0 var(--space-xs)}.highlight-overlay{pointer-events:none}.chant-renderer__score{position:relative}.feedback-summary{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-xl);margin-bottom:var(--space-lg)}.feedback-summary__title{font-size:1.3rem;color:var(--color-accent);margin-bottom:var(--space-lg);text-align:center}.feedback-summary__stats{text-align:center;margin-bottom:var(--space-lg)}.feedback-summary__accuracy{display:flex;flex-direction:column;align-items:center;margin-bottom:var(--space-md)}.feedback-summary__accuracy-number{font-size:3rem;font-weight:700;color:var(--color-text);line-height:1}.feedback-summary__accuracy-label{font-size:.85rem;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.feedback-summary__rating{font-size:1.2rem;font-weight:600;margin-bottom:var(--space-sm)}.feedback-summary__rating--excellent{color:#2d8a4e}.feedback-summary__rating--good{color:#4caf50}.feedback-summary__rating--fair{color:#ff9800}.feedback-summary__rating--needs-work{color:#e65100}.feedback-summary__detail{font-size:.9rem;color:var(--color-text-secondary)}.feedback-summary__partial{font-style:italic}.feedback-summary__empty{text-align:center;color:var(--color-text-secondary);font-style:italic;margin-bottom:var(--space-md)}.feedback-summary__trouble{border-top:1px solid var(--color-border);padding-top:var(--space-lg);margin-top:var(--space-lg)}.feedback-summary__trouble-title{font-size:1rem;margin-bottom:var(--space-md);color:var(--color-text)}.feedback-summary__trouble-list{list-style:none;padding:0;margin:0}.feedback-summary__trouble-item{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) 0;border-bottom:1px solid var(--color-border-light)}.feedback-summary__trouble-item:last-child{border-bottom:none}.feedback-summary__trouble-syllable{font-weight:600;min-width:80px}.feedback-summary__trouble-tendency{font-size:.85rem;font-weight:500}.feedback-summary__trouble-tendency--flat{color:#1565c0}.feedback-summary__trouble-tendency--sharp{color:#c62828}.feedback-summary__trouble-cents{font-size:.85rem;color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.feedback-summary__actions{display:flex;justify-content:center;gap:var(--space-md);margin-top:var(--space-xl)}.practice-page__hint{font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.error-boundary{display:flex;align-items:center;justify-content:center;min-height:200px;padding:var(--space-xl)}.error-boundary__card{text-align:center;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-xl) var(--space-2xl);max-width:480px}.error-boundary__title{font-family:var(--font-heading);color:var(--color-accent);margin-bottom:var(--space-md)}.error-boundary__message{color:var(--color-text-secondary);margin-bottom:var(--space-lg);line-height:1.5}.practice-page__notation{max-height:60vh;overflow-y:auto;scroll-behavior:smooth;-webkit-overflow-scrolling:touch}@media(max-width:640px){.header__subtitle{display:none}.page-container{padding:var(--space-md) var(--space-sm)}.chant-grid{grid-template-columns:1fr}.chant-metadata{flex-direction:column;gap:var(--space-sm)}.chant-detail__notation{padding:var(--space-md)}.practice-page__title{font-size:1.2rem}.practice-page__notation{padding:var(--space-md);max-height:45vh}.practice-page__audio-controls{flex-direction:column;gap:var(--space-md)}.practice-page__feedback-panel{flex-direction:column;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);min-height:100px}.practice-page__feedback-panel>*{width:100%;text-align:center}.practice-page__expected,.practice-page__detected,.practice-page__accuracy{flex-direction:row;justify-content:center;gap:var(--space-sm);min-height:auto}.practice-page__feedback-note{font-size:1.2rem}.practice-page__accuracy-label{font-size:1rem;height:auto}.practice-page__step-controls{flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-sm)}.practice-page__step-controls .btn{font-size:.85rem;padding:var(--space-xs) var(--space-md)}.pitch-indicator{padding:var(--space-sm)}.pitch-indicator__readout{font-size:.8rem;gap:var(--space-md)}.feedback-summary{padding:var(--space-md)}.feedback-summary__accuracy-number{font-size:2rem}.calibration-dialog__card{padding:var(--space-lg);width:95%}}
