.app-shell{display:grid;grid-template-rows:auto 1fr auto;min-height:100dvh;background:var(--color-bg);color:var(--color-fg);padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.app-shell__header{padding:.75rem 1rem;border-bottom:1px solid rgba(255,255,255,.06);background:linear-gradient(180deg,rgba(255,255,255,.03),transparent)}.app-shell__main{position:relative;display:grid;grid-template-columns:1fr;min-height:0}.app-shell--with-aside .app-shell__main{grid-template-columns:1fr minmax(280px,360px)}@media(max-width:900px){.app-shell--with-aside .app-shell__main{grid-template-columns:1fr}}.app-shell__stage{position:relative;min-height:0;display:flex;flex-direction:column;padding:1rem;overflow:hidden}.app-shell__aside{border-left:1px solid rgba(255,255,255,.06);padding:1rem;overflow-y:auto;background:#ffffff03}@media(max-width:900px){.app-shell__aside{border-left:none;border-top:1px solid rgba(255,255,255,.06)}}.app-shell__footer{padding:.5rem 1rem;border-top:1px solid rgba(255,255,255,.06);font-size:.8rem;color:var(--color-muted)}.panel{background:#ffffff09;border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-md);padding:1rem;display:flex;flex-direction:column;gap:.75rem}.panel+.panel{margin-top:.75rem}.panel--muted{opacity:.85}.panel--accent{border-color:#ffd24a80}.panel--error{background:#ff4d4d1f;border-color:#ff4d4d80}.panel__header{display:flex;align-items:start;justify-content:space-between;gap:.5rem}.panel__title{font-size:.95rem;font-weight:500;letter-spacing:.03em;margin:0}.panel__desc{margin:.25rem 0 0;font-size:.82rem;color:var(--color-muted)}.panel__actions{display:flex;gap:.5rem;flex-wrap:wrap}.panel__body{display:flex;flex-direction:column;gap:.5rem}.status-banner{display:flex;gap:.75rem;align-items:center;padding:.75rem 1rem;border-radius:var(--radius-md);border:1px solid transparent;font-size:.95rem;line-height:1.4}.status-banner__icon{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;font-weight:700;font-size:.8rem}.status-banner__content{flex:1;display:grid;gap:.25rem}.status-banner__actions{display:flex;gap:.5rem}.status-banner--info{background:#639cff1f;border-color:#639cff66}.status-banner--info .status-banner__icon{background:#639cff4d}.status-banner--success{background:#4ade801f;border-color:#4ade8066}.status-banner--success .status-banner__icon{background:#4ade804d}.status-banner--warning{background:#ffd24a24;border-color:#ffd24a80}.status-banner--warning .status-banner__icon{background:#ffd24a4d;color:#0a0a0f}.status-banner--error{background:#ff4d4d1f;border-color:#ff4d4d80}.status-banner--error .status-banner__icon{background:#ff4d4d4d}.btn{display:inline-flex;align-items:center;gap:.4rem;border-radius:10px;border:1px solid rgba(255,255,255,.12);background:#ffffff0d;color:inherit;font-family:inherit;font-weight:500;cursor:pointer;transition:background .12s ease,border-color .12s ease,transform 60ms ease}.btn:hover{background:#ffffff14;border-color:#ffffff38}.btn:active{transform:translateY(1px)}.btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--sm{font-size:.82rem;padding:.35rem .7rem}.btn--md{font-size:.92rem;padding:.5rem .95rem}.btn--primary{background:var(--color-accent);color:#0a0a0f;border-color:transparent}.btn--primary:hover{background:var(--color-accent-hi)}.btn--ghost{background:transparent;border-color:transparent}.btn--ghost:hover{background:#ffffff0f}.drawer-backdrop{position:fixed;inset:0;opacity:0;pointer-events:none;transition:opacity .18s ease;z-index:40}.drawer-backdrop--dimmed{background:#0006}.drawer-backdrop--transparent{background:transparent}.drawer-backdrop--open{opacity:1;pointer-events:auto}.drawer{position:fixed;top:0;bottom:0;width:var(--drawer-width, min(380px, 92vw));background:var(--color-surface);box-shadow:0 0 60px #0009;transition:transform .22s cubic-bezier(.2,.8,.2,1);z-index:50;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}.drawer[data-side=right]{right:0;border-left:1px solid rgba(255,255,255,.08);padding-right:env(safe-area-inset-right);transform:translate(100%)}.drawer[data-side=left]{left:0;border-right:1px solid rgba(255,255,255,.08);padding-left:env(safe-area-inset-left);transform:translate(-100%)}.drawer.drawer--open{transform:translate(0)}.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid rgba(255,255,255,.06)}.drawer__title{margin:0;font-size:1.05rem;font-weight:500}.drawer__close{all:unset;cursor:pointer;width:32px;height:32px;display:grid;place-items:center;border-radius:8px;font-size:1.4rem;line-height:1;color:var(--color-muted);transition:background .12s,color .12s}.drawer__close:hover{background:#ffffff0f;color:var(--color-fg)}.drawer__body{flex:1;overflow-y:auto;padding:1rem 1.25rem 1.5rem;display:flex;flex-direction:column;gap:.75rem}.drawer__hint{margin-top:auto;padding-top:.75rem;font-size:.72rem;color:var(--color-muted);text-align:center}.drawer__hint kbd{padding:1px 6px;border-radius:4px;background:#ffffff14;border:1px solid rgba(255,255,255,.12);font-family:inherit;font-size:.72rem}.stage-trigger{position:absolute;top:12px;z-index:6;padding:.35rem .7rem;background:#0a0a0fa6;border:1px solid rgba(255,255,255,.08);border-radius:10px;color:#ffffffd9;font-size:.72rem;letter-spacing:.12em;font-family:-apple-system,system-ui,sans-serif;cursor:pointer}.stage-trigger:hover{color:#fff;border-color:#ffffff29}.hud{position:absolute;top:12px;left:12px;right:12px;display:flex;justify-content:space-between;gap:12px;pointer-events:none;z-index:5}.hud-badge{min-width:140px;padding:.5rem .7rem;border-radius:12px;background:#0a0a0fa6;border:1px solid rgba(255,255,255,.08);color:#fff;font-family:-apple-system,system-ui,sans-serif;transition:opacity .15s ease}.hud-badge--dim{opacity:.35}.hud-badge__title{display:flex;align-items:center;gap:.4rem;font-size:.72rem;letter-spacing:.12em;color:var(--color-muted);margin-bottom:.15rem}.hud-badge__dot{width:8px;height:8px;border-radius:50%}.hud-badge--left .hud-badge__dot{background:#7dd3fc}.hud-badge--right .hud-badge__dot{background:#fca5a5}.hud-badge__mode{font-size:1.1rem;font-weight:600;letter-spacing:.08em}.hud-badge__bend{margin-top:.4rem;display:flex;align-items:center;gap:.5rem}.hud-badge__bend-track{position:relative;flex:1;height:6px;border-radius:3px;background:#ffffff14}.hud-badge__bend-fill{position:absolute;top:0;bottom:0;background:var(--color-accent);border-radius:3px}.hud-badge__bend-center{position:absolute;top:-2px;bottom:-2px;left:50%;width:1px;background:#ffffff4d}.hud-badge__bend-cents{font-variant-numeric:tabular-nums;font-size:.8rem;min-width:44px;text-align:right}.settings-trigger{position:absolute;top:14px;right:14px;z-index:20;width:44px;height:44px;display:grid;place-items:center;border-radius:999px;background:#0a0a0f8c;border:1px solid rgba(255,255,255,.12);color:#ffffffe6;cursor:pointer;transition:background .15s ease,transform .1s ease,color .15s ease}.settings-trigger:hover{background:#0a0a0fbf;color:var(--color-accent)}.settings-trigger:active{transform:scale(.96)}.settings-trigger:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.start-overlay{position:absolute;inset:0;z-index:30;display:grid;place-items:center;background:#0a0a0fd9;animation:start-overlay-fade-in .2s ease}@keyframes start-overlay-fade-in{0%{opacity:0}to{opacity:1}}.start-overlay--ready,.start-overlay--dismissed{animation:start-overlay-fade-out .6s ease forwards;pointer-events:none}@keyframes start-overlay-fade-out{0%{opacity:1}60%{opacity:1}to{opacity:0}}.start-overlay__cta{all:unset;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:1rem;padding:2rem 3rem;border-radius:var(--radius-lg);border:1px solid rgba(255,210,74,.35);background:linear-gradient(180deg,#ffd24a1a,#ffd24a08);transition:transform .12s ease,background .12s ease,border-color .12s ease;text-align:center;color:var(--color-fg)}.start-overlay__cta:hover{background:linear-gradient(180deg,#ffd24a2e,#ffd24a0f);border-color:#ffd24a99}.start-overlay__cta:active{transform:scale(.97)}.start-overlay__cta:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}.start-overlay__play{display:grid;place-items:center;width:68px;height:68px;border-radius:50%;background:var(--color-accent);color:var(--color-bg);font-size:1.8rem;font-weight:700;box-shadow:0 10px 40px #ffd24a4d;animation:start-pulse 2s ease-in-out infinite}@keyframes start-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.start-overlay__label{font-size:1.4rem;font-weight:500;letter-spacing:.06em}.start-overlay__hint{font-size:.8rem;color:var(--color-muted);max-width:16rem}.start-overlay__status{display:flex;flex-direction:column;align-items:center;gap:1rem;color:var(--color-fg);font-size:1rem}.start-overlay__spinner{width:36px;height:36px;border:3px solid rgba(255,255,255,.15);border-top-color:var(--color-accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.start-overlay__ready{display:flex;flex-direction:column;align-items:center;gap:.75rem;color:var(--color-fg);font-size:1.1rem;font-weight:500;letter-spacing:.04em;animation:ready-pop .4s cubic-bezier(.2,.9,.3,1.3)}@keyframes ready-pop{0%{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}.start-overlay__check{display:grid;place-items:center;width:56px;height:56px;border-radius:50%;background:#4ade802e;border:1px solid rgba(74,222,128,.6);color:var(--color-success);font-size:1.8rem;font-weight:700}.calib-wizard{position:absolute;inset:0;z-index:20;background:#0a0a0f8c;color:#fff;font-family:-apple-system,system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:2rem 1.5rem;pointer-events:auto;--calib-color: #ffd24a;--calib-color-hi: #ffde7d}.calib-wizard--rest{--calib-color: #ffd24a;--calib-color-hi: #ffde7d}.calib-wizard--recording{--calib-color: #ff5a5a;--calib-color-hi: #ff8080}.calib-wizard--paused{--calib-color: #4ade80;--calib-color-hi: #6ee7a0}.calib-wizard--recording{background:#3c0a0a8c}.calib-wizard--paused{background:#0a28148c}.calib-wizard__header{display:flex;gap:1rem;align-items:center;font-size:.8rem;letter-spacing:.08em;color:#ffffffb3}.calib-wizard__progress{font-variant-numeric:tabular-nums}.calib-wizard__main{display:flex;flex-direction:column;align-items:center;gap:1rem;text-align:center}.calib-wizard__state{font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;color:#ffffff80}.calib-wizard__prompt{font-size:1.35rem;font-weight:600;max-width:38rem;line-height:1.4}.calib-wizard__reps{font-size:.9rem;color:#ffffffb3;max-width:32rem;line-height:1.4}.calib-wizard__countdown{font-size:4.5rem;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em;color:var(--calib-color);line-height:1}.calib-wizard__state{color:var(--calib-color)}.calib-wizard__bar{width:min(32rem,80%);height:6px;border-radius:3px;background:#ffffff1a;overflow:hidden}.calib-wizard__bar-fill{height:100%;background:var(--calib-color);transition:width 80ms linear}.calib-wizard__footer{display:flex;gap:.75rem}.calib-wizard__btn{padding:.55rem 1.1rem;border-radius:10px;background:#ffffff1a;border:1px solid rgba(255,255,255,.15);color:#fff;font-size:.9rem;cursor:pointer;font-family:inherit}.calib-wizard__btn:hover{background:#ffffff29}.calib-wizard__btn--primary{background:var(--calib-color);color:#111;border-color:transparent;font-weight:600}.calib-wizard__btn--primary:hover{background:var(--calib-color-hi)}.calib-wizard__label{display:flex;flex-direction:column;gap:.35rem;align-items:center;margin-top:.5rem}.calib-wizard__label-k{font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:#ffffff8c}.calib-wizard__label-input{width:min(24rem,80vw);padding:.55rem .8rem;border-radius:10px;background:#00000073;border:1px solid rgba(255,255,255,.18);color:#fff;font-family:inherit;font-size:.95rem;text-align:center;outline:none}.calib-wizard__label-input:focus{border-color:var(--calib-color)}.calib-wizard__label-hint{font-size:.72rem;color:#ffffff80}.calib-trigger{position:absolute;top:12px;right:60px;z-index:6;padding:.35rem .7rem;background:#0a0a0fa6;border:1px solid rgba(255,255,255,.08);border-radius:10px;color:#fffc;font-size:.72rem;letter-spacing:.12em;font-family:-apple-system,system-ui,sans-serif;cursor:pointer}.calib-trigger:hover{color:#fff}.tp{--key-on: #60a5fa;--key-root: #ffd24a;--key-fifth: #ef4444;--key-off: rgba(255, 255, 255, .12);--key-black: rgba(20, 20, 24, .95);display:flex;flex-direction:column;gap:16px;min-width:0}.tp>section{min-width:0}.tp-h{margin:0 0 8px;font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--color-muted);font-weight:600}.tp-sets__row{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.tp-set{position:relative;flex:0 0 auto;min-width:120px;padding:10px 24px 10px 12px;border-radius:12px;background:#ffffff0d;border:1px solid rgba(255,255,255,.08);cursor:pointer;display:flex;flex-direction:column;gap:3px;transition:background .12s,border-color .12s}.tp-set:hover{background:#ffffff17}.tp-set--active{background:#ffd24a2e;border-color:#ffd24ab3}.tp-set__name{font-size:.9rem;font-weight:600;white-space:nowrap}.tp-set__name-edit{background:#0006;border:1px solid rgba(255,210,74,.5);border-radius:4px;color:#fff;font-size:.9rem;font-weight:600;font-family:inherit;padding:2px 4px;width:100%;min-width:0}.tp-set__sub{font-size:.7rem;color:var(--color-muted);white-space:nowrap}.tp-set__del{position:absolute;top:4px;right:4px;width:20px;height:20px;display:grid;place-items:center;border:none;background:#00000059;color:#ffffffb3;border-radius:5px;font-size:1rem;line-height:1;cursor:pointer}.tp-set__del:hover{background:#ff5a5a8c;color:#fff}.tp-set--add{min-width:48px;padding:10px;align-items:center;justify-content:center;font-size:1.5rem;color:var(--color-muted);background:#ffffff08;border-style:dashed}.tp-set--add:hover{color:#fff;background:#ffffff14}.tp-sets__hint{margin-top:6px;font-size:.68rem;color:var(--color-muted);text-align:center}.tp-top{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:end}.tp-scalesize{display:flex;flex-direction:column;gap:4px;align-items:center}.tp-scalesize__value{display:flex;align-items:baseline;gap:4px;font-size:1.1rem;font-weight:600;color:var(--color-fg);font-variant-numeric:tabular-nums}.tp-scalesize__hint{font-size:.68rem;color:var(--color-muted);font-weight:400}.tp-free{grid-column:1 / -1;display:inline-flex;align-items:center;gap:6px;font-size:.78rem;color:var(--color-muted);cursor:pointer;justify-self:start}.tp-linkhint{grid-column:1 / -1;font-size:.72rem;color:var(--color-muted);line-height:1.3}.tp-strings__hint{font-size:.72rem;color:var(--color-muted);margin-bottom:6px;line-height:1.4}.tp-strings__list{display:flex;flex-direction:column;gap:3px;padding:8px 6px;background:#00000059;border-radius:12px}.str-row{--accent: #60a5fa;display:grid;grid-template-columns:22px 1fr 56px;align-items:center;gap:8px;padding:2px 4px;border-radius:6px;min-height:22px}.str-row:hover{background:#ffffff0a}.str-row__track{position:relative;height:18px;border-radius:3px;background:linear-gradient(to bottom,transparent calc(50% - 1px),rgba(255,255,255,.08) calc(50% - 1px),rgba(255,255,255,.08) calc(50% + 1px),transparent calc(50% + 1px));cursor:pointer;touch-action:none;user-select:none}.str-row__octave{position:absolute;top:0;bottom:0;pointer-events:none;transform:translate(-50%)}.str-row__octave-line{position:absolute;top:0;bottom:0;left:0;width:1px;background:#fff3}.str-row__octave-label{position:absolute;bottom:-16px;left:0;transform:translate(-50%);font-size:.56rem;color:#ffffff59;font-variant-numeric:tabular-nums;white-space:nowrap}.str-row__semi{position:absolute;top:25%;bottom:25%;width:1px;background:#ffffff0f;pointer-events:none;transform:translate(-50%)}.str-row__semi--sharp{background:#ffffff1a;top:10%;bottom:10%}.str-row__marker{position:absolute;top:50%;width:14px;height:14px;margin-left:-7px;margin-top:-7px;border-radius:50%;background:var(--accent);box-shadow:0 2px 4px #00000080;pointer-events:none;transition:left 80ms ease-out;border:1.5px solid rgba(0,0,0,.35)}.str-row__marker--root{background:var(--key-root);width:16px;height:16px;margin-left:-8px;margin-top:-8px}.str-row__marker--ov{border:1.5px dashed #fff}.str-row__marker--flash{box-shadow:0 0 0 3px #fff,0 0 10px 4px var(--accent);transform:scale(1.2);transition:transform 80ms,box-shadow 80ms}.str-row__readout{font-size:.72rem;color:var(--color-fg);text-align:right;font-variant-numeric:tabular-nums;display:flex;flex-direction:column;line-height:1.1}.str-row__note{color:var(--accent);font-weight:600}.str-row__cents{font-size:.6rem;color:var(--color-muted)}.tp-strings{padding-bottom:20px}.pitch-ruler{display:flex;flex-direction:column;gap:6px;user-select:none;touch-action:pan-y}.pitch-ruler__track{position:relative;height:92px;border-radius:12px;background:#00000059;overflow:hidden}.pitch-ruler__band{position:absolute;top:0;bottom:0;pointer-events:none}.pitch-ruler__tick{position:absolute;top:0;bottom:0;width:26px;margin-left:-13px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:6px}.pitch-ruler__tick-line{width:1px;height:20px;background:#fff3}.pitch-ruler__tick-label{font-size:.7rem;color:#ffffff8c;margin-top:2px;pointer-events:none}.pitch-ruler__tick:hover .pitch-ruler__tick-label{color:#fff}.pitch-ruler__tick--root .pitch-ruler__tick-line{background:var(--key-root);width:2px;height:28px}.pitch-ruler__tick--root .pitch-ruler__tick-label{color:var(--key-root);font-weight:700}.pitch-ruler__tick--octave .pitch-ruler__tick-line{background:var(--key-root);opacity:.5}.pitch-ruler__marker{position:absolute;top:48px;width:18px;height:36px;margin-left:-9px;border-radius:8px;background:var(--key-on);box-shadow:0 2px 8px #00000080;cursor:grab;touch-action:none;display:grid;place-items:center}.pitch-ruler__marker:active{cursor:grabbing}.pitch-ruler__marker--root{background:var(--key-root);cursor:default}.pitch-ruler__cents{position:absolute;top:-18px;left:50%;transform:translate(-50%);font-size:.62rem;color:var(--key-on);background:#0000008c;padding:1px 5px;border-radius:4px;white-space:nowrap;pointer-events:none;font-variant-numeric:tabular-nums}.pitch-ruler__marker--root .pitch-ruler__cents{color:var(--key-root)}.pitch-ruler__hint{font-size:.68rem;color:var(--color-muted);text-align:center}.preset-grid{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.preset-card{all:unset;flex:0 0 130px;cursor:pointer;padding:8px 10px;border-radius:10px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;gap:6px;transition:background .12s,border-color .12s,transform .12s}.preset-card:hover{background:#ffffff14}.preset-card--on{background:#60a5fa2e;border-color:#60a5fa99}.preset-card__top{display:flex;justify-content:space-between;align-items:center;gap:6px}.preset-card__label{font-size:.76rem;font-weight:600;color:var(--color-fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preset-card__badge{flex:0 0 auto;font-size:.65rem;color:var(--color-muted);background:#00000059;padding:1px 6px;border-radius:999px;font-variant-numeric:tabular-nums}.preset-card__ruler{width:40px;height:40px;display:block}.preset-card--compact{flex:0 0 auto;flex-direction:column;align-items:center;gap:2px;padding:4px 6px;min-width:62px}.preset-card--compact .preset-card__label{font-size:.66rem;line-height:1.1;font-weight:600;color:var(--color-fg);display:flex;align-items:center;gap:4px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}.preset-card--compact .preset-card__badge{font-size:.56rem;padding:0 4px;border-radius:4px}.timbre-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:6px}.timbre-tile{all:unset;cursor:pointer;padding:6px 8px;border-radius:10px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;gap:2px;position:relative;transition:background .12s,border-color .12s}.timbre-tile:hover{background:#ffffff14}.timbre-tile--on{background:#60a5fa38;border-color:#60a5faa6}.timbre-tile__n{position:absolute;top:4px;right:6px;font-size:.6rem;color:var(--color-muted);font-variant-numeric:tabular-nums;background:#0000004d;padding:0 4px;border-radius:4px}.timbre-tile--on .timbre-tile__n{color:#fff;background:#60a5fa8c}.timbre-tile__label{font-size:.78rem;font-weight:600;color:var(--color-fg)}.timbre-tile__tag{font-size:.62rem;color:var(--color-muted)}.period-slider{display:flex;flex-direction:column;gap:6px;padding:8px 10px;background:#0000004d;border:1px solid rgba(255,255,255,.08);border-radius:10px}.period-slider__head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.period-slider__value{font-size:.88rem;font-weight:600;color:var(--color-fg);font-variant-numeric:tabular-nums}.period-slider__hint{font-size:.7rem;color:var(--color-muted);font-weight:400}.period-slider__nudge{display:inline-flex;gap:4px}.period-slider__nbtn{all:unset;width:24px;height:24px;display:grid;place-items:center;border-radius:6px;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);color:var(--color-fg);cursor:pointer;font-weight:700}.period-slider__nbtn:hover{background:#ffffff24}.period-slider__track{position:relative;height:36px;border-radius:6px;background:#0006;border:1px solid rgba(255,255,255,.06);touch-action:none;user-select:none;cursor:pointer}.period-slider__anchor{position:absolute;top:0;bottom:0;transform:translate(-50%);pointer-events:none}.period-slider__anchor-tick{position:absolute;top:4px;bottom:14px;left:0;width:1px;background:#ffffff40}.period-slider__anchor-label{position:absolute;bottom:1px;left:0;transform:translate(-50%);font-size:.58rem;color:#ffffff8c;white-space:nowrap}.period-slider__marker{position:absolute;top:2px;bottom:14px;width:8px;margin-left:-4px;border-radius:3px;background:var(--key-root);box-shadow:0 1px 3px #0009;pointer-events:none;transition:left 80ms ease-out}.period-slider__anchorbar{display:flex;flex-wrap:wrap;gap:4px}.period-slider__chip{all:unset;cursor:pointer;font-size:.72rem;color:var(--color-muted);padding:3px 10px;border-radius:999px;background:#ffffff0a;border:1px solid rgba(255,255,255,.1)}.period-slider__chip:hover{background:#ffffff1a;color:var(--color-fg)}.period-slider__chip--on{background:#ffd24a38;border-color:#ffd24a99;color:var(--key-root);font-weight:600}.scale-circle{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px;background:#00000059;border:1px solid rgba(255,255,255,.08);border-radius:12px}.scale-circle__svg{width:280px;max-width:100%;aspect-ratio:280 / 360;height:auto;display:block;touch-action:none}.scale-circle__modeOverlay{position:absolute;top:8px;right:12px;display:inline-flex;background:#ffffff0f;border-radius:999px;padding:2px;gap:2px}.scale-circle__rootslider{width:100%;max-width:320px;display:flex;flex-direction:column;gap:4px}.scale-circle__rsheader{display:flex;justify-content:space-between;align-items:center;gap:8px}.scale-circle__rslabel{font-size:.82rem;color:var(--color-fg);font-variant-numeric:tabular-nums}.scale-circle__rslabel b{color:var(--key-root)}.scale-circle__rscents{margin-left:4px;font-size:.7rem;color:var(--color-muted)}.scale-circle__rsmode{display:inline-flex;border-radius:999px;background:#ffffff0f;padding:2px;gap:2px}.scale-circle__modebtn{all:unset;cursor:pointer;padding:2px 10px;font-size:.72rem;color:var(--color-muted);border-radius:999px;font-variant-numeric:tabular-nums}.scale-circle__modebtn--on{background:#ffd24a38;color:var(--key-root);font-weight:600}.scale-circle__rstrack{position:relative;height:32px;border-radius:6px;background:#00000059;border:1px solid rgba(255,255,255,.08);touch-action:none;user-select:none;cursor:pointer;padding-bottom:12px}.scale-circle__rstick{position:absolute;top:20%;bottom:50%;width:1px;background:#ffffff14;transform:translate(-50%);pointer-events:none}.scale-circle__rstick--oct{top:0;bottom:50%;background:#ffffff4d;width:1px}.scale-circle__rsticklabel{position:absolute;bottom:-12px;left:50%;transform:translate(-50%);font-size:.56rem;color:#ffffff73;font-variant-numeric:tabular-nums;white-space:nowrap}.scale-circle__rsmarker{position:absolute;top:2px;bottom:14px;width:10px;margin-left:-5px;border-radius:3px;background:var(--key-root);box-shadow:0 1px 3px #0009;pointer-events:none;transition:left 80ms ease-out}.scale-circle__rstether{width:1px;height:10px;margin:-4px auto 0;background-image:linear-gradient(to bottom,var(--key-root) 50%,transparent 50%);background-size:1px 4px;background-repeat:repeat-y;opacity:.55}.scale-circle__octrow{display:flex;gap:6px}.scale-circle__lowest{display:flex;align-items:center;gap:10px;padding:6px 12px;border-radius:999px;background:#ffffff0a;border:1px solid rgba(255,255,255,.12)}.scale-circle__lowest-label{font-size:.78rem;color:var(--color-muted)}.scale-circle__lowest-label b{color:var(--color-fg);font-variant-numeric:tabular-nums}.scale-circle__lowest-oct{display:inline-flex;align-items:center;gap:4px}.scale-circle__octbtn{all:unset;cursor:pointer;width:24px;height:24px;display:grid;place-items:center;border-radius:6px;background:#ffffff0f;color:var(--color-fg);font-weight:700}.scale-circle__octbtn:hover:not(:disabled){background:#ffffff24}.scale-circle__octbtn:disabled{opacity:.35;cursor:not-allowed}.scale-circle__octval{min-width:18px;text-align:center;font-weight:700;font-variant-numeric:tabular-nums;color:var(--color-fg)}.scale-circle__hint{font-size:.68rem;color:var(--color-muted);text-align:center;line-height:1.35;max-width:280px}.scale-frame{padding:10px 12px;background:#00000059;border:1px solid rgba(255,255,255,.08);border-radius:12px;display:flex;flex-direction:column;gap:10px}.scale-frame__header{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}.scale-frame__name{font-size:.9rem;color:var(--color-fg)}.scale-frame__hint{font-size:.68rem;color:var(--color-muted);line-height:1.3}.scale-frame__track{position:relative;height:56px;touch-action:none;user-select:none;cursor:grab}.scale-frame__track:active{cursor:grabbing}.scale-frame__tick{position:absolute;top:16px;bottom:22px;width:1px;background:#ffffff1a;pointer-events:none}.scale-frame__tick--oct{background:#ffffff4d;top:10px;bottom:22px}.scale-frame__tick-label{position:absolute;bottom:-14px;left:0;transform:translate(-50%);font-size:.65rem;color:#ffffff8c;font-variant-numeric:tabular-nums;white-space:nowrap}.scale-frame__dot{position:absolute;top:50%;transform:translate(-50%,-50%);width:26px;height:26px;border-radius:50%;box-shadow:0 2px 8px #00000080;border:2px solid rgba(0,0,0,.4);display:grid;place-items:center;cursor:pointer;touch-action:none}.scale-frame__dot--root{width:32px;height:32px;border-color:#ffffff8c}.scale-frame__dot-num{font-size:.7rem;font-weight:700;color:#000000bf;pointer-events:none}.tp-count-nudge{display:inline-flex;align-items:center;gap:6px;padding:2px 4px;border-radius:10px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08)}.tp-count-nudge__btn{width:26px;height:26px;border:none;background:transparent;color:var(--color-fg);font-size:1.05rem;font-weight:700;cursor:pointer;border-radius:6px}.tp-count-nudge__btn:hover:not(:disabled){background:#ffffff1a}.tp-count-nudge__btn:disabled{opacity:.35;cursor:not-allowed}.tp-count-nudge__n{min-width:22px;text-align:center;font-weight:600;font-variant-numeric:tabular-nums}.tp-count-nudge__tag{font-size:.68rem;color:var(--color-muted);margin-right:4px}.tp-pattern-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:8px}.tp-pattern-head .tp-h{margin:0 auto 0 0;flex:0 0 auto}.tp-pattern-head .tp-chip{padding:4px 10px;font-size:.74rem}.tp-register-row{display:flex;justify-content:center;margin-top:6px}.tp-register-row .tp-chip{padding:4px 14px;font-size:.74rem}.tp-strings__bar{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}.tp-preview{padding:6px 14px;border-radius:999px;background:#60a5fa33;border:1px solid rgba(96,165,250,.55);color:#fff;font-family:inherit;font-size:.82rem;font-weight:600;cursor:pointer;transition:background .12s}.tp-preview:hover{background:#60a5fa52}.tp-preview--on{background:#ff5a5a47;border-color:#ff5a5aa6}.tp-seg{display:inline-flex;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:999px;padding:2px;gap:2px}.tp-seg__btn{all:unset;cursor:pointer;padding:3px 10px;font-size:.72rem;color:var(--color-muted);border-radius:999px}.tp-seg__btn--on{background:#60a5fa38;color:#fff;font-weight:600}.tp-preset-row,.tp-preset{display:flex;flex-direction:column;gap:4px}.tp-preset__label{font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:var(--color-muted)}.tp-preset__select{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);border-radius:8px;color:var(--color-fg);font-family:inherit;font-size:.88rem;padding:8px 10px;min-width:0}.str-row__num{all:unset;font-size:.72rem;color:var(--color-muted);text-align:center;font-variant-numeric:tabular-nums;font-weight:600;cursor:pointer;padding:2px 0;border-radius:4px;transition:background .12s,color .12s}.str-row__num:hover{background:#ffffff14;color:var(--color-fg)}.str-row--armed{background:#ffd24a1f;outline:1px solid rgba(255,210,74,.55)}.str-row--armed .str-row__num{color:var(--key-root);background:#ffd24a33}.tp-period__chips,.tp-tr__row{display:flex;flex-wrap:wrap;gap:6px}.tp-period__row{display:flex;align-items:center;gap:6px;margin-top:6px}.tp-period__label{font-size:.75rem;color:var(--color-muted)}.tp-period__unit{font-size:.72rem;color:var(--color-muted)}.tp-tr__sep{color:var(--color-muted);margin:0 4px}.tp-chip{padding:5px 10px;border-radius:999px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);color:var(--color-fg);font-family:inherit;font-size:.76rem;cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s}.tp-chip:hover{background:#ffffff1a}.tp-chip--on{background:#60a5fa38;border-color:#60a5faa6;color:#fff}.tp-typed{width:100%;background:#00000059;border:1px solid rgba(255,255,255,.1);border-radius:8px;color:var(--color-fg);font-family:ui-monospace,monospace;font-size:.82rem;padding:8px 10px;resize:vertical;min-height:40px;box-sizing:border-box}.tp-typed:focus{outline:1px solid rgba(96,165,250,.55);border-color:#60a5fa8c}.tp-apply-btn{align-self:flex-start;padding:6px 14px;background:#60a5fa33;border:1px solid rgba(96,165,250,.55);border-radius:7px;color:var(--color-fg);font-family:inherit;font-size:.8rem;cursor:pointer}.tp-apply-btn:hover{background:#60a5fa52}.mic-mode{display:flex;flex-direction:column;gap:8px}.mic-mode__head{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}.mic-mode__toggle,.mic-mode__quant{display:inline-flex;align-items:center;gap:6px;font-size:.82rem;cursor:pointer}.mic-mode__err{color:#ff6b6b;font-size:.75rem}.mic-mode__readout{display:flex;align-items:baseline;gap:12px;padding:10px 14px;background:#00000059;border-radius:10px;border:1px solid rgba(255,255,255,.08)}.mic-mode__note{font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--key-root)}.mic-mode__cents{font-size:.9rem;color:var(--color-muted);font-weight:500}.mic-mode__freq{font-size:.78rem;color:var(--color-muted);font-variant-numeric:tabular-nums;margin-left:auto}.mic-mode__listen{font-size:.85rem;color:var(--color-muted);font-style:italic}.mic-mode__actions{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}.mic-mode__armed{font-size:.78rem;color:var(--color-muted)}.mic-mode__capture{padding:8px 14px;background:#ffd24a38;border:1px solid rgba(255,210,74,.6);border-radius:8px;color:var(--color-fg);font-family:inherit;font-size:.85rem;font-weight:600;cursor:pointer}.tp-typed code{background:#0006;padding:1px 4px;border-radius:3px}.mic-mode__capture:disabled{opacity:.4;cursor:not-allowed}.mic-mode__capture:hover:not(:disabled){background:#ffd24a59}.stepper{display:flex;flex-direction:column;align-items:center;gap:6px}.stepper__label{font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:var(--color-muted)}.stepper__row{display:flex;align-items:stretch;border-radius:14px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);overflow:hidden;width:100%}.stepper__btn{flex:0 0 38px;background:transparent;color:var(--color-fg);border:none;font-size:1.25rem;font-weight:600;cursor:pointer;transition:background .1s}.stepper__btn:hover:not(:disabled){background:#ffffff1a}.stepper__btn:disabled{opacity:.3;cursor:not-allowed}.stepper__value{flex:1;display:grid;place-items:center;font-size:1.25rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--color-fg);min-width:0;padding:8px 4px}.stepper--big .stepper__value{font-size:1.75rem}.stepper--big .stepper__btn{font-size:1.5rem}.tp-adv{border-top:1px solid rgba(255,255,255,.08);padding-top:10px}.tp-adv__toggle{all:unset;cursor:pointer;display:flex;align-items:center;gap:6px;font-size:.8rem;color:var(--color-muted);padding:4px 0}.tp-adv__toggle:hover{color:var(--color-fg)}.tp-adv__body{display:flex;flex-direction:column;gap:14px;margin-top:8px}.tp-adv__section{display:flex;flex-direction:column;gap:6px;padding:10px;border-radius:10px;background:#ffffff08;border:1px solid rgba(255,255,255,.06)}.tp-adv__head{display:flex;justify-content:space-between;align-items:center;font-size:.75rem;color:var(--color-muted);text-transform:uppercase;letter-spacing:.08em;font-weight:600}.tp-check{display:inline-flex;align-items:center;gap:4px;font-size:.75rem;cursor:pointer;text-transform:none;letter-spacing:0}.tp-strings__bar{display:flex;align-items:center;gap:8px;margin-bottom:2px}.tp-linkbtn{all:unset;cursor:pointer;padding:3px 8px;border-radius:5px;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);font-size:.72rem;color:var(--color-fg)}.tp-linkbtn:hover{background:#ffffff1a}.tp-strings__count{margin-left:auto;font-size:.7rem;color:var(--color-muted)}.tp-strings__list{display:flex;flex-direction:column;padding-left:2px}.tp-str-wrap{position:relative}.tp-str-gap{position:absolute;left:-4px;top:calc(-1 * var(--row-gap, 0));height:100%;font-size:.58rem;color:#ffffff59;transform:translateY(-50%) translate(-100%);white-space:nowrap;font-variant-numeric:tabular-nums;padding-right:4px;pointer-events:none}.tp-str{display:grid;grid-template-columns:20px 22px 1fr 60px 22px;align-items:center;gap:6px;padding:3px 6px;border-radius:6px;background:#ffffff08;border:1px solid rgba(255,255,255,.06);cursor:pointer;user-select:none}.tp-str:hover{background:#ffffff0f}.tp-str--on{background:#4dabf729;border-color:#4dabf78c}.tp-str--root{border-color:#ffd24a8c}.tp-str--root select{color:var(--color-accent)}.tp-str--ov select{color:#7dd3fc}.tp-str__idx{font-size:.65rem;color:var(--color-muted);text-align:right;font-variant-numeric:tabular-nums}.tp-str__note{display:flex;gap:4px;align-items:center}.tp-str__note select{background:transparent;border:1px solid rgba(255,255,255,.08);border-radius:4px;color:var(--color-fg);font-family:inherit;font-size:.75rem;padding:2px 3px}.tp-cents{background:#0000004d;border:1px solid rgba(255,255,255,.1);border-radius:4px;color:var(--color-fg);font-family:inherit;font-size:.72rem;width:46px;text-align:right;padding:2px 4px}.tp-str__hz{font-size:.66rem;color:var(--color-muted);text-align:right;font-variant-numeric:tabular-nums}.tp-str__reset{all:unset;cursor:pointer;width:20px;height:20px;display:grid;place-items:center;border-radius:4px;color:#ffffff8c;background:#ffffff0a;font-size:.8rem}.tp-str__reset:hover{background:#ffffff1a;color:#fff}.tp-swap__hint{font-size:.7rem;color:var(--color-muted)}.tp-swap__btns{display:flex;flex-wrap:wrap;gap:6px}.tp-swap__btn{flex:1 1 calc(33% - 4px);min-width:70px;padding:6px 8px;border-radius:6px;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);color:var(--color-fg);font-family:inherit;font-size:.75rem;cursor:pointer;text-align:center}.tp-swap__btn:hover:not(:disabled){background:#60a5fa33;border-color:#60a5fa8c}.tp-swap__btn:disabled{opacity:.4;cursor:not-allowed}.sp{--key-root: #ffd24a;display:flex;flex-direction:column;gap:18px}.sp-h{margin:0 0 8px;font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--color-muted);font-weight:600}.sp-sets__row{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.sp-set{position:relative;flex:0 0 auto;min-width:110px;padding:10px 24px 10px 12px;border-radius:12px;background:#ffffff0d;border:1px solid rgba(255,255,255,.08);cursor:pointer;display:flex;flex-direction:column;gap:3px;transition:background .12s,border-color .12s}.sp-set:hover{background:#ffffff17}.sp-set--active{background:#ffd24a2e;border-color:#ffd24ab3}.sp-set__name{font-size:.88rem;font-weight:600;white-space:nowrap}.sp-set__name-edit{background:#0006;border:1px solid rgba(255,210,74,.5);border-radius:4px;color:#fff;font-size:.88rem;font-weight:600;font-family:inherit;padding:2px 4px;width:100%;min-width:0}.sp-set__sub{font-size:.66rem;color:var(--color-muted);white-space:nowrap}.sp-set__del{position:absolute;top:4px;right:4px;width:20px;height:20px;display:grid;place-items:center;border:none;background:#00000059;color:#ffffffb3;border-radius:5px;font-size:1rem;line-height:1;cursor:pointer}.sp-set__del:hover{background:#ff5a5a8c;color:#fff}.sp-set--add{min-width:44px;padding:10px;align-items:center;justify-content:center;font-size:1.4rem;color:var(--color-muted);background:#ffffff08;border-style:dashed}.sp-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:6px}.sp-tile{all:unset;cursor:pointer;padding:8px 6px;border-radius:10px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;align-items:center;gap:2px;color:#fffc;transition:background .12s,color .12s,border-color .12s}.sp-tile:hover{background:#ffffff14;color:#fff}.sp-tile--on{background:#ffd24a2e;border-color:#ffd24aa6;color:var(--key-root)}.sp-tile__label{font-size:.76rem;font-weight:600}.sp-tile__tag{font-size:.62rem;color:var(--color-muted)}.sp-osc-picker{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.sp-osc{all:unset;cursor:pointer;padding:8px 4px;border-radius:10px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;align-items:center;gap:4px;color:#ffffffb3;transition:background .12s,color .12s,border-color .12s}.sp-osc:hover{background:#ffffff14;color:#fff}.sp-osc--on{background:#60a5fa40;border-color:#60a5fab3;color:#fff}.sp-osc__glyph{width:44px;height:22px}.sp-osc__label{font-size:.6rem;text-transform:capitalize;color:inherit}.sp-env{width:100%;height:auto;display:block;background:#0000004d;border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:2px;margin-bottom:6px}.sp-range{display:flex;flex-direction:column;gap:2px;padding:6px 2px}.sp-range__head{display:flex;justify-content:space-between;font-size:.76rem;font-variant-numeric:tabular-nums}.sp-range__k{color:var(--color-muted)}.sp-range__v{color:var(--color-fg);font-weight:600}.sp-range__input{-webkit-appearance:none;appearance:none;height:4px;border-radius:2px;background:#ffffff1a;outline:none}.sp-range__input::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:var(--key-root);box-shadow:0 1px 3px #0009;cursor:pointer}.sp-range__input::-moz-range-thumb{width:16px;height:16px;border:none;border-radius:50%;background:var(--key-root);cursor:pointer}.sp-wet__hint{margin-top:4px;font-size:.62rem;color:var(--color-muted);font-variant-numeric:tabular-nums;text-align:center}.sp-gesture{font-size:.7rem;color:var(--color-muted);text-align:center;margin:4px 0 0}.tuner{position:absolute;inset:0;z-index:25;pointer-events:none;color:#f5f5f7;font-family:-apple-system,system-ui,sans-serif}.tuner>*{pointer-events:auto}.tuner__trail{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.tuner__air{position:absolute;top:12px;right:12px;padding:.35rem .9rem;background:#0a0a0fa6;border:1px solid rgba(255,255,255,.08);border-radius:10px;color:#ffffffe6;font-size:.72rem;letter-spacing:.14em;font-weight:600;font-family:-apple-system,system-ui,sans-serif;cursor:pointer}.tuner__air:hover{color:#fff;border-color:#fff3}.tuner__readout{position:absolute;top:14px;left:50%;transform:translate(-50%);text-align:center;background:#0a0a0fb3;border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:10px 18px;min-width:180px}.tuner__note{font-size:2rem;font-weight:700;letter-spacing:.03em;line-height:1;display:flex;align-items:baseline;justify-content:center;gap:.2em}.tuner__octave{font-size:1rem;font-weight:500;opacity:.6}.tuner__cents{font-size:1rem;font-weight:600;margin-left:.5em}.tuner__cents--intune{color:#4ade80}.tuner__cents--sharp{color:#fca5a5}.tuner__cents--flat{color:#7dd3fc}.tuner__target{font-size:.72rem;opacity:.55;margin-top:4px;letter-spacing:.04em}.tuner__hint,.tuner__error{font-size:.82rem;opacity:.7;padding:4px 0}.tuner__error{color:#ff6b6b;max-width:28ch}.stage-wrap{flex:1;min-height:0;display:grid;place-items:center;padding:0;background:#000}.stage{position:relative;width:100%;max-width:100%;max-height:100%;overflow:hidden;background:#000}.stage__video{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;filter:brightness(.6) saturate(.8)}.stage__overlay{position:absolute;inset:0;pointer-events:none}.stage__overlay--mirrored{transform:scaleX(-1)}.hand-overlay,.strings-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.stage__curtain{position:absolute;inset:0;display:grid;place-items:center;gap:.75rem;color:var(--color-fg);background:#0009;z-index:10;text-align:center;padding:2rem}.stage__retry{all:unset;cursor:pointer;padding:.55rem 1.2rem;border-radius:10px;background:var(--color-accent);color:var(--color-bg);font-weight:500;transition:background .12s}.stage__retry:hover{background:var(--color-accent-hi)}.field{display:grid;gap:.35rem;font-size:.85rem}.field__row{display:flex;justify-content:space-between;align-items:baseline}.field__label{color:var(--color-fg)}.field__value{font-variant-numeric:tabular-nums;color:var(--color-accent);font-weight:500}.field__hint{color:var(--color-muted);font-size:.74rem;line-height:1.35}.field input[type=range]{width:100%;accent-color:var(--color-accent)}.field select,.field input[type=text],.field input[type=number]{padding:.4rem .55rem;font-family:inherit;font-size:.9rem;background:#ffffff0d;color:var(--color-fg);border:1px solid rgba(255,255,255,.12);border-radius:8px;outline:none}.field select:focus,.field input:focus{border-color:var(--color-accent)}.grf{display:flex;flex-direction:column;gap:18px}.grf-intro{font-size:.8rem;color:var(--color-muted);line-height:1.5;margin:0}.grf-intro em{color:var(--color-fg);font-style:normal;font-weight:600}.grf-sec{display:flex;flex-direction:column;gap:8px}.grf-sec__h{margin:0;font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;color:var(--color-muted);font-weight:600}.grf-ref{display:flex;gap:14px;align-items:flex-start;padding:10px;background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:10px;flex-wrap:wrap}.grf-ref>svg{flex:0 0 auto}.grf-ref__legend{flex:1;margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;font-size:.74rem;color:var(--color-muted);line-height:1.45}.grf-ref__legend b{color:var(--color-fg);font-weight:700}.grf-ref__legend code{background:#0006;padding:1px 5px;border-radius:4px;font-size:.72rem;color:#ffd24a}.grf-row{display:flex;gap:10px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;padding-bottom:4px}.grf-row>.grf-ex{flex:0 0 min(260px,80%);scroll-snap-align:start}.grf-row::-webkit-scrollbar{height:6px}.grf-row::-webkit-scrollbar-thumb{background:#ffffff2e;border-radius:3px}.grf-ex{padding:10px;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:#ffffff08;display:flex;flex-direction:column;gap:8px}.grf-ex--accept{border-color:#4ade8059}.grf-ex--reject{border-color:#ff6b6b59}.grf-ex__hd{display:flex;justify-content:space-between;align-items:baseline;gap:6px}.grf-ex__verdict{font-size:.68rem;letter-spacing:.1em;font-weight:700;text-transform:uppercase}.grf-ex--accept .grf-ex__verdict{color:#4ade80}.grf-ex--reject .grf-ex__verdict{color:#ff6b6b}.grf-ex__title{font-size:.78rem;color:var(--color-fg);font-weight:500;text-align:right}.grf-ex__stats{display:flex;flex-direction:column;gap:2px;font-size:.7rem;font-variant-numeric:tabular-nums}.grf-ex__stat{display:flex;justify-content:space-between;color:var(--color-muted)}.grf-ex__stat-k{color:#ffffff8c}.grf-ex__stat-v{color:var(--color-fg);font-weight:500}.grf-ex__stat.ok .grf-ex__stat-v{color:#4ade80}.grf-ex__stat.bad .grf-ex__stat-v{color:#ff6b6b}.grf-ex__reason{font-size:.72rem;color:var(--color-muted);line-height:1.4}.grf-hand{align-self:center;background:#00000059;border-radius:8px}.grf-footer{font-size:.72rem;color:var(--color-muted);margin:0}.grf-footer em{color:var(--color-fg);font-style:normal;font-weight:600}.app-root{position:fixed;inset:0;display:flex;flex-direction:column;background:var(--color-bg);color:var(--color-fg);overflow:hidden;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.app-root__fallback{flex:1;display:grid;place-items:center;padding:2rem}.telemetry{position:fixed;left:14px;bottom:14px;z-index:15;display:flex;gap:.6rem;padding:.35rem .7rem;border-radius:999px;background:#0a0a0f8c;border:1px solid rgba(255,255,255,.08);color:var(--color-muted);font-size:.75rem;font-variant-numeric:tabular-nums;pointer-events:none}:root{--color-bg: #0a0a0f;--color-surface: #13131a;--color-surface-hi: #1c1c26;--color-fg: #f5f5f7;--color-muted: rgba(245, 245, 247, .6);--color-accent: #ffd24a;--color-accent-hi: #ffde7d;--color-left: #7dd3fc;--color-right: #fca5a5;--color-error: #ff6b6b;--color-success: #4ade80;--radius-sm: 6px;--radius-md: 12px;--radius-lg: 20px;--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 40px;color-scheme:dark;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Roboto,Helvetica Neue,sans-serif;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-synthesis:none;text-rendering:optimizeLegibility}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%}body{background:radial-gradient(ellipse at top,#13131a,#0a0a0f 70%);color:var(--color-fg);overscroll-behavior:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}a{color:inherit;text-decoration:none}button{font-family:inherit;color:inherit}::selection{background:var(--color-accent);color:var(--color-bg)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
