:root{--lab-fg:#fff;--lab-bg:#000;--lab-accent:#c96a2b;--lab-font:system-ui,sans-serif;--lab-radius:4px}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:var(--lab-bg);color:var(--lab-fg);font-family:var(--lab-font);-webkit-font-smoothing:antialiased}canvas.lab-canvas{position:fixed;inset:0;width:100%;height:100%;display:block;touch-action:none}.lab-perm{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:color-mix(in srgb,var(--lab-bg) 70%,transparent);backdrop-filter:blur(14px);padding:16px}.lab-perm__card{max-width:440px;padding:28px 28px 22px;border:1px solid color-mix(in srgb,var(--lab-fg) 18%,transparent);border-radius:var(--lab-radius);background:color-mix(in srgb,var(--lab-bg) 85%,var(--lab-fg) 4%)}.lab-perm__title{margin:0 0 10px;font-size:22px;line-height:1.15}.lab-perm__text{margin:0 0 20px;font-size:14px;line-height:1.5;opacity:.8}.lab-perm__actions{display:flex;gap:10px;flex-wrap:wrap}.lab-btn{appearance:none;font:inherit;font-size:14px;padding:11px 18px;border-radius:var(--lab-radius);border:1px solid color-mix(in srgb,var(--lab-fg) 30%,transparent);background:transparent;color:var(--lab-fg);cursor:pointer;transition:background .2s,transform .2s}.lab-btn:hover{background:color-mix(in srgb,var(--lab-fg) 10%,transparent)}.lab-btn:active{transform:scale(.97)}.lab-btn:focus-visible{outline:2px solid var(--lab-accent);outline-offset:2px}.lab-btn--primary{background:var(--lab-accent);border-color:var(--lab-accent);color:#fff}.lab-btn--primary:hover{filter:brightness(1.1);background:var(--lab-accent)}.lab-sensor{position:fixed;top:16px;right:16px;z-index:40;display:flex;align-items:center;gap:8px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;opacity:.85;padding:8px 12px;border-radius:999px;border:1px solid color-mix(in srgb,var(--lab-fg) 15%,transparent)}.lab-sensor__dot{width:8px;height:8px;border-radius:50%;background:#666}.lab-sensor[data-state=on] .lab-sensor__dot{background:#3ec26a;box-shadow:0 0 10px #3ec26a;animation:lab-pulse 1.6s infinite}.lab-sensor[data-state=loading] .lab-sensor__dot{background:#e0a030;animation:lab-pulse .8s infinite}.lab-sensor[data-state=lost] .lab-sensor__dot{background:#e0a030}.lab-sensor[data-state=denied] .lab-sensor__dot{background:#c33}.lab-sensor__state{opacity:.6}@keyframes lab-pulse{50%{opacity:.4}}.lab-hint{position:fixed;left:50%;bottom:22px;transform:translate(-50%);z-index:40;font-size:13px;letter-spacing:.02em;opacity:.75;text-align:center;max-width:90vw;transition:opacity .5s;pointer-events:none}.lab-hint.is-hidden{opacity:0}.lab-fps{position:fixed;left:12px;bottom:12px;font:12px monospace;opacity:.6;z-index:40}.lab-back{position:fixed;top:16px;left:16px;z-index:40;font-size:12px;letter-spacing:.08em;text-transform:uppercase;text-decoration:none;color:var(--lab-fg);opacity:.7;padding:8px 0}.lab-back:hover{opacity:1}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}@media(prefers-reduced-motion:reduce){.lab-sensor[data-state] .lab-sensor__dot{animation:none}}.lab-sensor__detail{position:fixed;top:58px;right:16px;z-index:40;max-width:300px;margin:0;font-size:12px;line-height:1.45;padding:10px 12px;border-radius:8px;background:color-mix(in srgb,var(--lab-bg) 88%,transparent);border:1px solid color-mix(in srgb,var(--lab-fg) 15%,transparent);backdrop-filter:blur(8px)}.lab-sensor__detail[hidden]{display:none}.lab-fatal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:24px;background:var(--lab-bg);color:var(--lab-fg);text-align:center}.lab-fatal div{max-width:420px}.lab-fatal h2{margin:0 0 12px;font-size:22px}.lab-fatal p{margin:0 0 20px;font-size:14px;line-height:1.55;opacity:.8}.lab-fatal .lab-btn{text-decoration:none;display:inline-block}.lab-btn[disabled]{opacity:.55;cursor:progress}@media(max-width:600px){.lab-sensor__detail{left:16px;right:16px;max-width:none}}.lab-sound{position:fixed;top:13px;left:146px;z-index:41;appearance:none;border:1px solid color-mix(in srgb,var(--lab-fg) 22%,transparent);background:color-mix(in srgb,var(--lab-bg) 55%,transparent);backdrop-filter:blur(6px);color:var(--lab-fg);font:inherit;font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:6px 11px;border-radius:999px;cursor:pointer;opacity:.8;display:flex;gap:6px;align-items:center}.lab-sound:hover{opacity:1}.lab-sound[aria-pressed=true]{opacity:1;border-color:var(--lab-accent)}.lab-sound:focus-visible{outline:2px solid var(--lab-accent);outline-offset:2px}.lab-sound__ico{font-size:9px;letter-spacing:-.1em}@media(max-width:600px){.lab-sound{left:134px;top:13px;padding:6px 9px}.lab-sound__t{display:none}}@font-face{font-family:Cormorant;font-style:italic;font-weight:300;font-display:swap;src:url(/assets/fonts/cormorant-italic-300-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Cormorant;font-style:italic;font-weight:300;font-display:swap;src:url(/assets/fonts/cormorant-italic-300-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cormorant;font-style:italic;font-weight:400;font-display:swap;src:url(/assets/fonts/cormorant-italic-400-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Cormorant;font-style:italic;font-weight:400;font-display:swap;src:url(/assets/fonts/cormorant-italic-400-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cormorant;font-style:normal;font-weight:300;font-display:swap;src:url(/assets/fonts/cormorant-normal-300-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Cormorant;font-style:normal;font-weight:300;font-display:swap;src:url(/assets/fonts/cormorant-normal-300-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cormorant;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/cormorant-normal-400-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Cormorant;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/cormorant-normal-400-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cormorant;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/cormorant-normal-500-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Cormorant;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/cormorant-normal-500-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Italiana;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/italiana-normal-400-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Onest;font-style:normal;font-weight:300;font-display:swap;src:url(/assets/fonts/onest-normal-300-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Onest;font-style:normal;font-weight:300;font-display:swap;src:url(/assets/fonts/onest-normal-300-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Onest;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/onest-normal-400-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Onest;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/onest-normal-400-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Onest;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/onest-normal-500-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Onest;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/onest-normal-500-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Oranienbaum;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/oranienbaum-normal-400-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Oranienbaum;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/oranienbaum-normal-400-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--vv-porcelain:#F0EFEB;--vv-sand:#D8CEC4;--vv-mist:#A9C0D1;--vv-pink:#D5A6AD;--vv-champagne:#D8C6AC;--vv-graphite:#26282A;--vv-burgundy:#642B39;--vv-muted:#55585a;--vv-display:"Oranienbaum","Cormorant",serif;--vv-accent:"Cormorant","Times New Roman",serif;--vv-latin:"Italiana","Cormorant",serif;--vv-text:"Onest",system-ui,sans-serif;--lab-font:var(--vv-text);--lab-radius:999px}.lab-btn{font-family:var(--vv-text);font-size:12px;letter-spacing:.14em;text-transform:uppercase;padding:13px 22px;border-radius:999px;border-color:currentColor}.lab-btn--primary{color:var(--lab-bg)!important}.lab-btn--small{font-size:11px;padding:9px 16px}.lab-back,.lab-sound,.lab-sensor{font-family:var(--vv-text)}.lab-back{letter-spacing:.14em}.lab-sound{left:176px}@media(max-width:600px){.lab-sound{left:164px}}.lab-perm__title,.lab-fatal h2{font:400 26px/1.1 var(--vv-display)}.lab-hint{font-family:var(--vv-accent);font-style:italic;font-size:17px;letter-spacing:0}:root{--lab-bg:#03070f;--lab-fg:#dfe9f5;--lab-accent:var(--vv-pink)}.title{position:fixed;left:30px;top:50%;transform:translateY(-50%);z-index:10;pointer-events:none}.title h1{margin:0;font-family:var(--vv-latin);font-weight:400;font-size:clamp(30px,4.2vw,64px);line-height:1;letter-spacing:.28em;text-transform:uppercase}.title h1 span{display:block;padding-left:.9em;opacity:.55}.title .sub{margin:18px 0 0 2px;font-family:var(--vv-accent);font-style:italic;font-size:20px;letter-spacing:0;opacity:.75}.read{position:fixed;right:28px;top:50%;transform:translateY(-50%);z-index:10;width:250px;display:flex;flex-direction:column;gap:12px;align-items:flex-end;text-align:right}.read__state{margin:0;display:flex;gap:8px;align-items:center;font-size:12px;letter-spacing:.24em;text-transform:uppercase}.read__dot{width:8px;height:8px;border-radius:50%;background:#5c6b7d;transition:background .3s,box-shadow .3s}body[data-state=voice] .read__dot{background:#d5a6ad;box-shadow:0 0 10px #d5a6ad}body[data-state=impulse] .read__dot{background:#d8c6ac;box-shadow:0 0 14px #d8c6ac}body[data-state=decay] .read__dot{background:#7a9bb0}.meters{display:grid;grid-template-columns:auto 1fr;gap:5px 10px;align-items:center;width:100%;font-size:10px;letter-spacing:.14em;text-transform:uppercase;opacity:.65}.meters i{display:block;height:3px;background:#dfe9f51f;border-radius:2px;overflow:hidden}.meters b{display:block;height:100%;width:0;background:var(--vv-pink)}.read__code{margin:0;font-size:13px;line-height:1.5;letter-spacing:.06em;color:var(--vv-pink);font-variant-numeric:tabular-nums}.lab-btn--small{font-size:12px;padding:8px 14px}.styles{display:flex;flex-direction:column;align-items:flex-end;gap:6px;margin-top:10px;pointer-events:auto}.styles__k{margin:4px 0 0;font-size:10px;letter-spacing:.24em;text-transform:uppercase;opacity:.55}.chips{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:5px}.chip{appearance:none;font:inherit;font-size:11px;letter-spacing:.06em;color:var(--lab-fg);background:#dfe9f50d;border:1px solid rgba(223,233,245,.2);border-radius:999px;padding:5px 10px;cursor:pointer}.chip:hover{background:#dfe9f51f}.chip[aria-pressed=true]{border-color:var(--lab-accent);background:#d5a6ad29}.pals{display:flex;gap:6px}.pal{appearance:none;width:24px;height:24px;border-radius:50%;border:2px solid transparent;box-shadow:0 0 0 1px #dfe9f540;cursor:pointer;padding:0}.pal[aria-pressed=true]{border-color:#03070f;box-shadow:0 0 0 2px var(--lab-accent)}.chip:focus-visible,.pal:focus-visible{outline:2px solid var(--lab-accent);outline-offset:2px}.panel{position:fixed;left:0;right:0;bottom:24px;z-index:10;display:flex;flex-direction:column;align-items:center;gap:12px;pointer-events:none;padding:0 16px}.panel__row{display:flex;gap:10px;pointer-events:auto}.panel__note{margin:0;font-size:12px;line-height:1.5;opacity:.55;text-align:center;max-width:560px}.lab-btn--primary{color:#03070f}.lab-sensor{border-color:#dfe9f526}.lab-hint{display:none}@media(max-width:900px){.read{width:200px;right:18px}}@media(max-width:600px){.title{top:62px;transform:none;left:20px}.title h1{font-size:26px}.title .sub{margin-top:10px}.read{position:fixed;transform:none;inset:auto 20px 186px;width:auto;align-items:flex-start;text-align:left;gap:8px}.meters{grid-template-columns:auto 1fr auto 1fr auto 1fr;gap:4px 6px}.read__code{font-size:12px}.styles{align-items:flex-start;margin-top:4px}.chips{justify-content:flex-start}.styles__k{display:none}.panel{bottom:18px}.panel__row{flex-direction:column;width:100%}.panel__row .lab-btn{width:100%}.panel__note{font-size:11px}}
