:root { color-scheme: light; --paper: #f2efe7; --paper-strong: #fffdf7; --ink: #171b1a; --muted: #6b706d; --line: #d5d0c5; --forest: #173f37; --forest-deep: #0d2d28; --orange: #f45a35; --orange-soft: #f9d9ce; --lime: #d6ed9a; --shadow: 0 16px 45px rgba(23, 31, 28, 0.09); --tab-size: 0.96rem; --radius-large: 26px; --radius-medium: 18px; --radius-small: 11px; font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-synthesis: none; } * { box-sizing: border-box; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } html { scroll-behavior: smooth; } body { margin: 0; background: radial-gradient(circle at 92% 3%, rgba(214, 237, 154, 0.5), transparent 25rem), var(--paper); color: var(--ink); min-width: 320px; } button, input, output { font: inherit; } button, a, label { -webkit-tap-highlight-color: transparent; } button, .file-button { cursor: pointer; } a { color: inherit; } button:focus-visible, a:focus-visible, input:focus-visible, [tabindex]:focus-visible { outline: 3px solid var(--orange); outline-offset: 3px; } .page-shell { width: min(1480px, calc(100% - 40px)); margin: 0 auto; } .topbar { min-height: 88px; display: flex; align-items: center; justify-content: space-between; gap: 24px; border-bottom: 1px solid rgba(23, 27, 26, 0.15); } .brand { display: inline-flex; align-items: center; gap: 11px; font-size: 0.86rem; font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; text-decoration: none; } .brand-mark { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%; background: var(--forest); color: white; font-size: 0.7rem; letter-spacing: -0.06em; } .topbar-actions, .metadata-row, .transport-buttons, .progress-copy, .zoom-control { display: flex; align-items: center; } .topbar-actions { gap: 9px; } .format-pill, .metadata-pill { border: 1px solid rgba(23, 27, 26, 0.18); border-radius: 999px; background: rgba(255, 253, 247, 0.52); white-space: nowrap; } .format-pill { padding: 9px 13px; font: 700 0.7rem/1 ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--muted); } .button { min-height: 42px; display: inline-flex; align-items: center; justify-content: center; padding: 0 17px; border: 1px solid transparent; border-radius: 999px; font-size: 0.78rem; font-weight: 750; text-decoration: none; transition: transform 160ms ease, background 160ms ease, color 160ms ease; } .button:hover { transform: translateY(-1px); } .button-quiet { background: transparent; border-color: rgba(23, 27, 26, 0.22); } .button-dark { background: var(--ink); color: white; } .button-light { background: white; color: var(--forest-deep); } .hero { min-height: 470px; display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(310px, 0.55fr); align-items: end; gap: clamp(40px, 8vw, 120px); padding: 84px 4vw 68px; } .eyebrow { display: flex; gap: 12px; align-items: center; margin: 0 0 23px; font-size: 0.72rem; font-weight: 800; letter-spacing: 0.13em; text-transform: uppercase; color: var(--muted); } .eyebrow span + span::before { content: "•"; margin-right: 12px; color: var(--orange); } .hero h1 { max-width: 900px; margin: 0; font-family: Iowan Old Style, Baskerville, Georgia, serif; font-size: clamp(4.4rem, 10vw, 9.8rem); line-height: 0.79; letter-spacing: -0.075em; font-weight: 600; } .artist-line { margin: 30px 0 20px; font-size: clamp(1.1rem, 2.2vw, 1.55rem); color: var(--muted); } .artist-line strong { color: var(--ink); } .metadata-row { flex-wrap: wrap; gap: 9px; } .metadata-pill { display: inline-flex; gap: 7px; padding: 9px 13px; font-size: 0.75rem; color: var(--muted); } .metadata-pill strong { color: var(--ink); } .arrangement-panel { align-self: end; padding: 25px; border: 1px solid rgba(23, 27, 26, 0.14); border-radius: var(--radius-large); background: rgba(255, 253, 247, 0.7); box-shadow: var(--shadow); backdrop-filter: blur(16px); } .panel-kicker, .section-index { margin: 0; font-size: 0.65rem; line-height: 1.2; font-weight: 850; letter-spacing: 0.15em; text-transform: uppercase; color: var(--orange); } .segmented-control { display: grid; grid-template-columns: repeat(var(--arrangement-count, 2), minmax(0, 1fr)); gap: 6px; padding: 5px; margin: 14px 0 15px; border-radius: 14px; background: #e9e5dc; } .segment-button { min-height: 44px; border: 0; border-radius: 10px; background: transparent; color: var(--muted); font-size: 0.78rem; font-weight: 750; } .segment-button[aria-selected="true"] { background: var(--paper-strong); color: var(--ink); box-shadow: 0 5px 16px rgba(23, 27, 26, 0.1); } .arrangement-description { min-height: 2.8em; margin: 0; color: var(--muted); font-size: 0.84rem; line-height: 1.5; } body.single-arrangement .arrangement-panel { display: none; } body.single-arrangement .hero { grid-template-columns: minmax(0, 1fr); } body.single-arrangement .hero-copy { max-width: 1100px; } .practice-player { position: sticky; top: 12px; z-index: 20; display: grid; grid-template-columns: minmax(290px, 0.9fr) minmax(260px, 1.25fr) minmax(310px, 1fr); gap: 28px; align-items: center; padding: 19px 22px; border: 1px solid rgba(255, 255, 255, 0.12); border-radius: var(--radius-large); background: var(--forest); color: white; box-shadow: 0 20px 55px rgba(13, 45, 40, 0.25); } .transport { display: grid; grid-template-columns: auto 1fr auto; gap: 13px; align-items: center; } .play-button { width: 54px; height: 54px; display: grid; place-items: center; border: 0; border-radius: 50%; background: var(--orange); color: white; transition: transform 160ms ease; } .play-button:hover { transform: scale(1.04); } .play-icon { transform: translateX(1px); font-size: 1rem; } .transport-copy { min-width: 0; } .transport-copy span, .practice-settings label > span:last-child { color: rgba(255, 255, 255, 0.66); } .transport-label { display: block; margin-bottom: 4px; font-size: 0.67rem; font-weight: 800; letter-spacing: 0.09em; text-transform: uppercase; } .transport-copy strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.9rem; } .transport-buttons { gap: 6px; } .icon-button { width: 39px; height: 39px; display: grid; place-items: center; border: 1px solid rgba(255, 255, 255, 0.24); border-radius: 50%; background: transparent; color: inherit; font-size: 1rem; transition: background 160ms ease, border 160ms ease; } .icon-button:hover { background: rgba(255, 255, 255, 0.11); } .icon-button.small { width: 31px; height: 31px; border-color: rgba(23, 27, 26, 0.22); color: var(--ink); } .beat-and-progress { min-width: 0; } .progress-copy { justify-content: space-between; gap: 20px; margin-bottom: 9px; color: rgba(255, 255, 255, 0.68); font-size: 0.7rem; font-weight: 700; } .progress-track { height: 3px; overflow: hidden; border-radius: 999px; background: rgba(255, 255, 255, 0.2); } .progress-track span { display: block; width: 0; height: 100%; background: var(--lime); transition: width 220ms ease; } .beat-dots { display: flex; gap: 6px; margin-top: 10px; } .beat-dot { width: 6px; height: 6px; border-radius: 50%; background: rgba(255, 255, 255, 0.24); transition: transform 100ms ease, background 100ms ease; } .beat-dot.active { background: var(--lime); transform: scale(1.45); } .practice-settings { display: flex; align-items: center; justify-content: flex-end; gap: 18px; } .tempo-control { display: grid; grid-template-columns: auto auto; gap: 2px 10px; min-width: 125px; } .tempo-control > span { color: rgba(255, 255, 255, 0.65); font-size: 0.68rem; } .tempo-control strong { justify-self: end; font-size: 0.72rem; } .tempo-control input { grid-column: 1 / -1; width: 100%; accent-color: var(--lime); } .toggle-row { display: flex; align-items: center; gap: 8px; white-space: nowrap; font-size: 0.72rem; } .toggle-row input { position: absolute; inline-size: 1px; block-size: 1px; opacity: 0; } .toggle { width: 30px; height: 18px; padding: 2px; border-radius: 999px; background: rgba(255, 255, 255, 0.2); transition: background 160ms ease; } .toggle::after { content: ""; display: block; width: 14px; height: 14px; border-radius: 50%; background: white; transition: transform 160ms ease; } .toggle-row input:checked + .toggle { background: var(--orange); } .toggle-row input:checked + .toggle::after { transform: translateX(12px); } .toggle-row input:focus-visible + .toggle { outline: 3px solid var(--orange); outline-offset: 3px; } .practice-note { margin: 12px 22px 0; color: var(--muted); font-size: 0.72rem; line-height: 1.45; } .content-grid { display: grid; grid-template-columns: minmax(0, 1fr) 315px; gap: 24px; padding: 58px 0 80px; } .sheet, .side-card { border: 1px solid rgba(23, 27, 26, 0.13); background: var(--paper-strong); } .sheet { min-width: 0; padding: clamp(22px, 4vw, 50px); border-radius: var(--radius-large); box-shadow: var(--shadow); } .sheet-header { display: flex; justify-content: space-between; align-items: end; gap: 20px; margin-bottom: 30px; } .sheet-header h2, .side-card h2, .embed-strip h2 { margin: 7px 0 0; font-family: Iowan Old Style, Baskerville, Georgia, serif; font-weight: 600; letter-spacing: -0.035em; } .sheet-header h2 { font-size: clamp(2.1rem, 4vw, 3.5rem); } .zoom-control { gap: 7px; color: var(--muted); font-size: 0.72rem; font-weight: 700; } .tab-section + .tab-section { margin-top: 48px; } .tab-section-header { display: flex; align-items: center; gap: 13px; margin: 0 0 14px; } .tab-section-header h3 { margin: 0; font-size: 0.74rem; letter-spacing: 0.12em; text-transform: uppercase; } .tab-section-header::after { content: ""; flex: 1; height: 1px; background: var(--line); } .tab-system { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .tab-system + .tab-system { margin-top: 12px; } .measure { position: relative; min-width: 0; overflow: hidden; padding: 18px 18px 17px; border: 1px solid var(--line); border-radius: var(--radius-medium); background: #faf8f2; transition: transform 170ms ease, border 170ms ease, background 170ms ease, color 170ms ease; cursor: pointer; } .measure:hover { transform: translateY(-2px); border-color: rgba(23, 63, 55, 0.5); } .measure.active { border-color: var(--forest); background: var(--forest); color: white; box-shadow: 0 16px 32px rgba(23, 63, 55, 0.19); } .measure-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 11px; } .measure-number { display: inline-flex; align-items: center; gap: 8px; font-size: 0.64rem; font-weight: 850; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); } .measure-number::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--line); } .measure.active .measure-number, .measure.active .bar-hint { color: rgba(255, 255, 255, 0.63); } .measure.active .measure-number::before { background: var(--orange); box-shadow: 0 0 0 5px rgba(244, 90, 53, 0.18); } .bar-hint { font-size: 0.64rem; color: var(--muted); } .tab-lines { overflow-x: auto; padding: 4px 0 3px; scrollbar-width: thin; } .tab-row, .marker-row { display: grid; grid-template-columns: 1.6ch max-content; gap: 0.7ch; width: max-content; min-width: 100%; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: var(--tab-size); line-height: 1.47; letter-spacing: -0.03em; white-space: pre; font-variant-ligatures: none; } .string-label { color: var(--orange); font-weight: 850; } .marker-row { min-height: 1.3em; color: var(--orange); font-weight: 900; } .marker-row .string-label { color: transparent; } .lyrics-line { min-height: 1.5em; margin: 12px 0 0 2.3ch; color: var(--orange); font-family: Iowan Old Style, Baskerville, Georgia, serif; font-size: 1rem; font-style: italic; line-height: 1.35; } .measure.active .lyrics-line { color: var(--lime); } .chord-lyrics-block { display: flex; flex-wrap: wrap; gap: 14px 24px; padding: 20px; border: 1px solid var(--line); border-radius: var(--radius-medium); background: #faf8f2; } .chord-span { display: inline-grid; gap: 3px; } .chord-span strong { color: var(--orange); font: 800 0.76rem/1 ui-monospace, SFMono-Regular, Menlo, monospace; } .sidebar { display: flex; flex-direction: column; gap: 16px; } .side-card { padding: 25px; border-radius: var(--radius-medium); } .side-card h2 { font-size: 1.7rem; } .legend-list { display: grid; grid-template-columns: auto 1fr; gap: 12px 15px; margin: 23px 0 0; } .legend-list dt { min-width: 27px; height: 27px; display: grid; place-items: center; margin: 0; border-radius: 8px; background: var(--orange-soft); color: #a92c12; font: 850 0.79rem/1 ui-monospace, SFMono-Regular, Menlo, monospace; } .legend-list dd { align-self: center; margin: 0; color: var(--muted); font-size: 0.78rem; } .data-card { background: var(--lime); } .data-card p:not(.panel-kicker) { margin: 14px 0 0; color: #405344; font-size: 0.84rem; line-height: 1.55; } .data-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 23px 0; } .data-stats div { display: grid; gap: 2px; } .data-stats strong { font-family: Iowan Old Style, Baskerville, Georgia, serif; font-size: 2rem; font-weight: 600; } .data-stats span { color: #536756; font-size: 0.64rem; text-transform: uppercase; letter-spacing: 0.07em; } .text-link { display: inline-flex; gap: 6px; align-items: center; font-size: 0.77rem; font-weight: 800; text-underline-offset: 4px; } .shortcuts-card ul { display: grid; gap: 9px; margin: 19px 0 0; padding: 0; list-style: none; } .shortcuts-card li { display: grid; grid-template-columns: auto auto 1fr; gap: 5px; align-items: center; } .shortcuts-card li span { justify-self: end; color: var(--muted); font-size: 0.75rem; } kbd, code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } kbd { min-width: 25px; padding: 5px 7px; border: 1px solid var(--line); border-bottom-width: 2px; border-radius: 6px; background: #f4f1e9; font-size: 0.66rem; text-align: center; } .embed-strip { display: flex; align-items: end; justify-content: space-between; gap: 40px; margin-bottom: 58px; padding: clamp(30px, 5vw, 58px); border-radius: var(--radius-large); background: var(--orange); color: white; } .embed-strip .panel-kicker { color: var(--forest-deep); } .embed-strip h2 { max-width: 650px; font-size: clamp(2.2rem, 5vw, 4.5rem); line-height: 0.98; } .embed-strip p:not(.panel-kicker) { max-width: 650px; margin: 16px 0 0; color: rgba(255, 255, 255, 0.78); font-size: 0.87rem; } .embed-strip code { padding: 2px 5px; border-radius: 4px; background: rgba(255, 255, 255, 0.16); } footer { min-height: 76px; display: flex; align-items: center; justify-content: space-between; gap: 24px; border-top: 1px solid rgba(23, 27, 26, 0.15); color: var(--muted); font-size: 0.72rem; } footer a { text-underline-offset: 3px; } .toast { position: fixed; right: 22px; bottom: 22px; z-index: 50; max-width: min(360px, calc(100% - 44px)); padding: 12px 16px; border-radius: 12px; background: var(--ink); color: white; box-shadow: var(--shadow); font-size: 0.8rem; opacity: 0; transform: translateY(8px); pointer-events: none; transition: opacity 180ms ease, transform 180ms ease; } .toast.show { opacity: 1; transform: translateY(0); } .error-panel { position: fixed; inset: auto 20px 20px 20px; z-index: 60; max-width: 680px; margin: auto; padding: 18px; border-radius: 14px; background: #721f16; color: white; box-shadow: var(--shadow); } .error-panel strong, .error-panel span { display: block; } .error-panel span { margin-top: 5px; color: rgba(255, 255, 255, 0.78); font-size: 0.8rem; } body.embed { background: var(--paper); } body.embed .page-shell { width: min(1120px, calc(100% - 24px)); } body.embed .topbar, body.embed .embed-strip, body.embed footer, body.embed .shortcuts-card, body.embed .data-card { display: none; } body.embed .hero { min-height: auto; padding: 34px 12px 28px; } body.embed .hero h1 { font-size: clamp(3.6rem, 10vw, 7rem); } body.embed .content-grid { grid-template-columns: minmax(0, 1fr) 250px; padding: 28px 0 20px; } @media (max-width: 1120px) { .practice-player { grid-template-columns: 1fr 1fr; } .practice-settings { grid-column: 1 / -1; justify-content: space-between; padding-top: 12px; border-top: 1px solid rgba(255, 255, 255, 0.13); } .content-grid, body.embed .content-grid { grid-template-columns: 1fr; } .sidebar { display: grid; grid-template-columns: repeat(3, 1fr); } body.embed .sidebar { grid-template-columns: 1fr; } } @media (max-width: 780px) { .page-shell { width: min(100% - 22px, 1480px); } .topbar { min-height: 72px; } .format-pill, .button-quiet { display: none; } .hero { grid-template-columns: 1fr; min-height: auto; gap: 38px; padding: 60px 10px 40px; } .hero h1 { font-size: clamp(4.1rem, 24vw, 7.4rem); } .practice-player { position: relative; top: auto; grid-template-columns: 1fr; gap: 18px; padding: 18px; } .practice-settings { grid-column: auto; flex-wrap: wrap; justify-content: flex-start; } .tempo-control { flex: 1 0 150px; } .content-grid { padding-top: 34px; } .sheet { padding: 22px 12px; } .sheet-header { padding: 0 9px; } .tab-system { grid-template-columns: 1fr; } .measure { padding-inline: 14px; } .sidebar { grid-template-columns: 1fr; } .embed-strip { align-items: flex-start; flex-direction: column; } footer { align-items: flex-start; flex-direction: column; justify-content: center; } } @media (max-width: 480px) { .topbar-actions .button-dark { padding-inline: 13px; } .brand > span:last-child { display: none; } .eyebrow { align-items: flex-start; flex-direction: column; } .eyebrow span + span::before { display: none; } .arrangement-panel { padding: 20px; } .transport { grid-template-columns: auto minmax(0, 1fr); } .transport-buttons { grid-column: 1 / -1; justify-content: flex-end; } .sheet-header { align-items: flex-start; flex-direction: column; } .zoom-control { align-self: flex-end; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; } }