@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-condensed-cyrillic-ext-500-normal-BeBjlrOh.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-condensed-vietnamese-500-normal-CkG7ISwK.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-condensed-latin-ext-500-normal--oYb3bSD.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-condensed-latin-500-normal-BqaLkUoX.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-sans-condensed-cyrillic-ext-700-normal-Cq09-7_W.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-sans-condensed-vietnamese-700-normal-BHzPe_nH.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-sans-condensed-latin-ext-700-normal-CXZ_9bG9.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-sans-condensed-latin-700-normal-D8r4s4aS.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--ink:#0b0b0b;--ink-2:#2b2b2b;--muted:#545454;--line:#d4d4d4;--paper:#fff;--accent:#cf142b;--selected:#fcf1f2;--warning:#a3111f;--code:#f2f2f2;--cjk:"Noto Sans SC";--body:"IBM Plex Sans", var(--cjk), sans-serif;--display:"IBM Plex Sans Condensed", var(--cjk), sans-serif;--mono:"IBM Plex Mono", var(--cjk), monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[lang=zh-Hant]{--cjk:"Noto Sans TC"}:root[lang=ja]{--cjk:"Noto Sans JP";word-break:auto-phrase}*{box-sizing:border-box}body{background:var(--paper);color:var(--ink);font-family:var(--body);-webkit-text-size-adjust:100%;margin:0}a{color:var(--ink)}a:hover{color:var(--accent)}button{font:inherit;color:inherit}:focus-visible{outline:none}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.page{flex-direction:column;max-width:1280px;margin:0 auto;padding:24px clamp(16px,4vw,56px) 64px;display:flex}.button{border:1px solid var(--ink);background:var(--paper);min-height:44px;color:var(--ink);cursor:pointer;border-radius:0;padding:0 16px;font-size:14px;font-weight:500}.button.small{min-height:40px;padding:0 12px;font-size:13px}.button[aria-pressed=true]{background:var(--ink);color:var(--paper)}.download{background:var(--ink);min-height:60px;color:var(--paper);text-align:left;cursor:pointer;border:0;border-radius:0;padding:0 28px;font-size:22px;font-weight:700}.download:disabled{background:var(--line);color:var(--muted);cursor:not-allowed}.download[aria-busy=true]{cursor:progress}.languages{justify-content:flex-end;padding-bottom:24px;display:flex}.languages>div{border:1px solid var(--ink);flex-wrap:wrap;display:flex}.languages .button{border:0}.languages .button:lang(en){font-family:IBM Plex Sans,sans-serif}.languages .button:lang(zh-Hans){font-family:Noto Sans SC,sans-serif}.languages .button:lang(zh-Hant){font-family:Noto Sans TC,sans-serif}.languages .button:lang(ja){font-family:Noto Sans JP,sans-serif}.masthead{flex-direction:column;gap:14px;padding-bottom:32px;display:flex}.masthead h1{letter-spacing:-.02em;margin:0;font-family:IBM Plex Sans Condensed,sans-serif;font-size:clamp(64px,10vw,140px);font-weight:700;line-height:.9}.masthead h1 .dot{--dot-end:35.5%;background:linear-gradient(var(--accent) var(--dot-end), var(--ink) var(--dot-end));color:#0000;-webkit-background-clip:text;background-clip:text}.masthead .lead{font-family:var(--display);max-width:22em;margin:0;font-size:clamp(26px,3.4vw,40px);font-weight:700;line-height:1.2}.section{border-top:2px solid var(--ink);flex-wrap:wrap;gap:24px;padding:28px 0 40px;display:flex}.section>h2{font-family:var(--display);flex:0 0 200px;margin:0;font-size:26px;font-weight:700}.section-body{flex-direction:column;flex:999 640px;gap:24px;min-width:0;display:flex}.note{color:var(--muted);margin:0;font-size:13px;line-height:1.6}.status{color:var(--ink-2);margin:0;font-size:14px;line-height:1.6}.status.error{color:var(--warning)}.cameras{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;display:grid}.camera{border:1px solid var(--ink);cursor:pointer;align-items:flex-start;gap:12px;padding:16px;display:flex}.camera:has(input:checked){border:2px solid var(--accent);padding:15px}.camera:has(input:disabled){border-color:var(--line);color:var(--muted);cursor:not-allowed}.camera input{width:18px;height:18px;accent-color:var(--accent);flex:none;margin:2px 0 0}.camera-text{flex-direction:column;gap:6px;min-width:0;display:flex}.camera-name{font-size:18px;font-weight:600}.camera-firmware{font-family:var(--mono);color:var(--muted);font-size:12px}.badge{background:var(--paper);color:var(--ink-2);border:1px dashed var(--muted);align-self:flex-start;padding:2px 8px;font-size:12px}.badge.supported{background:var(--ink);color:var(--paper);border-color:var(--ink)}.badge.experimental{color:var(--warning);border:1px solid var(--warning)}.note.warning{color:var(--warning)}.preview-row{flex-wrap:wrap;align-items:flex-start;gap:24px;display:flex}.viewer{flex-direction:column;flex:520px;gap:10px;min-width:0;display:flex}.frame{aspect-ratio:3/2;background:#c9c4ba;position:relative;overflow:hidden}.frame img{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.frame-placeholder{font-family:var(--mono);color:var(--ink-2);justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;inset:0}.image-comparison{width:100%;height:100%}.frame[aria-busy=true] .comparison-effect{opacity:.6}.comparison-effect{z-index:1;transition:opacity .12s}.tag{z-index:2;pointer-events:none;color:var(--paper);background:#0b0b0bc7;padding:4px 8px;font-size:12px;position:absolute;top:10px;right:10px}.preview-side{flex-direction:column;flex:0 300px;gap:16px;min-width:0;display:flex}.field{flex-direction:column;gap:8px;display:flex}.field-label{color:var(--muted);font-size:13px}.previewing{font-family:var(--display);font-size:26px;font-weight:700}.upload{border:1px solid var(--ink);cursor:pointer;justify-content:center;align-items:center;gap:8px;min-height:48px;font-size:15px;font-weight:500;display:inline-flex}.toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.toolbar p{margin:0;font-size:16px}.toolbar .count{color:var(--accent);font-family:IBM Plex Mono,monospace;font-weight:500}.toolbar>div{gap:8px;display:flex}.table-box{border-top:1px solid var(--ink);position:relative;overflow-x:auto}table{border-collapse:collapse;width:100%;min-width:600px;font-size:14px}th{color:var(--muted);text-align:left;padding:10px 8px;font-size:12px;font-weight:400}td{vertical-align:middle;padding:14px 8px;line-height:1.5}tbody tr{border-bottom:1px solid var(--line)}tbody tr:has(input:checked){background:var(--selected)}td input[type=checkbox]{width:20px;height:20px;accent-color:var(--accent);cursor:pointer;margin:0}.effect-name{cursor:pointer;font-size:16px;font-weight:600}.effect-icon{width:40px;height:40px;image-rendering:pixelated;display:block}.modules{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:0 32px;display:grid}.module{border-bottom:1px solid var(--line);cursor:pointer;align-items:flex-start;gap:12px;padding:14px 0;display:flex}.module input{width:20px;height:20px;accent-color:var(--accent);cursor:pointer;flex:none;margin:2px 0 0}.module-text{flex-direction:column;gap:4px;min-width:0;display:flex}.module-name{font-size:16px;font-weight:600}.module-description{color:var(--ink-2);font-size:15px;line-height:1.6}.module:has(input:not(:checked)) .module-description{color:var(--muted)}.module-warning{color:var(--warning);font-size:14px;line-height:1.6}.package{flex-wrap:wrap;flex:999 640px;align-items:flex-start;gap:32px;min-width:0;display:flex}.package dl{flex:320px;grid-template-columns:140px minmax(0,1fr);row-gap:10px;margin:0;font-size:15px;line-height:1.5;display:grid}.package dt{color:var(--muted)}.package dd{margin:0}.package .package-note{color:var(--muted);grid-column:1/-1;margin-top:6px;font-size:14px}.package-action{flex-direction:column;flex:0 320px;gap:12px;display:flex}.steps{flex-direction:column;flex:999 640px;gap:12px;min-width:0;margin:0;padding-left:24px;font-size:16px;line-height:1.6;display:flex}code{background:var(--code);padding:1px 5px;font-family:IBM Plex Mono,monospace;font-size:14px}.footer{border-top:1px solid var(--ink);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:16px;padding-top:20px;font-size:14px;display:flex}.footer p{max-width:72ch;margin:0}.footer div{flex-wrap:wrap;gap:20px;display:flex}
