@font-face{font-family:PP Formula;src:url(https://comfy.org/fonts/PPFormula-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:PP Formula;src:url(https://comfy.org/fonts/PPFormula-Medium.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:PP Formula;src:url(https://comfy.org/fonts/PPFormula-Semibold.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:PP Formula;src:url(https://comfy.org/fonts/PPFormula-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(https://comfy.org/fonts/inter-latin-normal.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}:root{--ink:#211927;--text:#211927;--ink2:#3c3644;--mute:#6f6876;--line:#2119271f;--soft:#f6f5f2;--paper:#fff;--well:#f7f6f3;--lav:#5c4cae;--lav2:#f3f1f6;--yel:#f2ff59;--ok:#157a43;--ok-bg:#eef6f1;--canvas:#d5d0c8;--danger:#b42318;--danger-bg:#fdf1ef;--photo:#f1efe9;--font-sans:"PP Formula", Inter, system-ui, sans-serif;--font-mono:Inter, ui-monospace, SFMono-Regular, Menlo, monospace;--shadow:none;--border:#2119271a;--track:#e7e4de;--page:1080px;--gutter:56px}*{box-sizing:border-box}html,body{margin:0;padding:0}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:var(--soft)}body{min-height:100%;color:var(--text);background:var(--soft);font-family:var(--font-sans);letter-spacing:-.011em;-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.5}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer}::placeholder{color:#9a948c}::selection{background:var(--yel);color:var(--ink)}:focus-visible{outline:2px solid var(--ink);outline-offset:2px}a{color:inherit}.app{flex-direction:column;min-height:100vh;display:flex}.site-header{z-index:20;padding:14px max(var(--gutter), calc((100% - var(--page)) / 2)) 13px;background:var(--soft);border-bottom:1px solid var(--border);flex:none;position:relative}.header-bar{justify-content:space-between;align-items:center;gap:16px;width:100%;display:flex}.brand{min-width:0;color:var(--ink);letter-spacing:-.02em;align-items:center;gap:10px;font-size:14px;font-weight:500;display:inline-flex}.brand-mark{flex:none;place-items:center;width:22px;height:22px;display:grid}.brand-mark svg{width:22px;height:22px;display:block}.brand-word{white-space:nowrap}.header-actions{flex:none;align-items:center;display:flex}.page{min-height:0;width:min(var(--page), calc(100% - var(--gutter) * 2));flex-direction:column;flex:1;margin:0 auto;padding:0 0 4px;display:flex}.hero{text-align:left;padding:18px 0 0}.hero h1{letter-spacing:-.038em;color:var(--ink);margin:0;font-size:clamp(28px,3vw,36px);font-weight:500;line-height:1.05;transition:none}.hero p{max-width:36rem;color:var(--mute);letter-spacing:-.011em;margin:8px 0 0;font-size:14px;font-weight:400;line-height:1.45}.header-nav{flex-wrap:wrap;justify-content:flex-start;gap:2px;margin:12px 0 14px;display:flex}.header-nav button{color:var(--mute);letter-spacing:-.011em;background:0 0;border:1px solid #0000;border-radius:8px;padding:6px 10px;font-size:13px;font-weight:500}.header-nav button:hover{color:var(--ink);background:#2119270a}.header-nav button.on{color:var(--ink);background:var(--paper);border-color:var(--border);box-shadow:none}.mockpill,.warn{border-radius:999px;padding:5px 10px;font-size:12px;font-weight:500}.mockpill{background:var(--yel);color:var(--ink);letter-spacing:-.01em}.warn{width:fit-content;max-width:100%;color:var(--ink2);box-shadow:none;text-align:left;background:#fbf8ee;border:1px solid #eadfb8;border-radius:10px;margin:12px 0 0;padding:8px 12px;font-size:13px;font-weight:400;line-height:1.45;display:block}.stage-wrap{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.nav-arrow{z-index:5;border:1px solid var(--border);background:var(--paper);width:32px;height:32px;color:var(--ink);box-shadow:none;border-radius:50%;place-items:center;margin-top:-16px;padding:0;display:grid;position:absolute;top:50%}.nav-arrow svg{width:16px;height:16px;display:block}.nav-arrow path{fill:none;stroke:currentColor;stroke-width:1.25px;stroke-linecap:round;stroke-linejoin:round}.nav-arrow.prev{left:-44px}.nav-arrow.next{right:-44px}.nav-arrow:hover{background:var(--well)}.track-viewport{z-index:1;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.track-viewport.is-open{overflow:visible}.reel{will-change:transform;background:0 0;border-radius:0;align-items:stretch;gap:32px;width:max-content;min-width:100%;height:auto;margin:0;display:flex;position:absolute;top:0;bottom:0;left:0;overflow:visible}.stage{flex-direction:column;flex:none;align-self:stretch;min-width:0;min-height:0;transition:none;display:flex;position:relative}.stage-body{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.card{background:var(--paper);border:1px solid var(--border);box-shadow:none;border-radius:16px;flex-direction:column;flex:1;min-height:0;padding:16px 16px 14px;display:flex}.hd{flex:none;align-items:center;gap:10px;min-height:36px;margin-bottom:14px;display:flex}.icon{border:1px solid var(--border);width:28px;height:28px;color:var(--ink);background:0 0;border-radius:8px;flex:none;place-items:center;display:grid}.icon svg{width:16px;height:16px;display:block}.name{letter-spacing:-.03em;font-size:clamp(22px,2vw,28px);font-weight:500;line-height:1.05}.hd .tagline{min-width:0;color:var(--mute);flex:1;margin:0;font-size:13px;font-weight:400;line-height:1.35}.titles{min-width:0}.endpoint{margin-left:auto}.chip{font-family:var(--font-mono);color:var(--mute);border:1px solid var(--border);letter-spacing:0;background:0 0;border-radius:999px;align-items:center;gap:6px;max-width:280px;padding:4px 8px;font-size:11px;display:inline-flex}.chip .m{letter-spacing:.04em;color:var(--mute);background:0 0;border-radius:0;padding:0;font-size:10px;font-weight:600}.chip .path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pill{border:1px solid var(--border);min-width:72px;height:28px;color:var(--mute);letter-spacing:-.01em;background:0 0;border-radius:999px;flex:none;justify-content:center;align-items:center;gap:6px;padding:0 10px;font-size:12px;font-weight:500;display:flex;position:relative}.pill.run{color:#3f4a08;background:#f4f7d4;border-color:#0000}.pill.done{background:var(--ok-bg);color:var(--ok);border-color:#0000}.pill.err{background:var(--danger-bg);color:var(--danger);border-color:#0000}.pill i{background:currentColor;border-radius:50%;width:6px;height:6px;display:inline-block}.body{flex:1;grid-template-columns:minmax(336px,372px) minmax(0,1fr);align-items:stretch;gap:20px;min-height:0;display:grid}.panel{background:0 0;border:0;border-radius:0;flex-direction:column;gap:10px;min-height:0;padding:0;display:flex;overflow:hidden}.panel-scroll{flex-direction:column;flex:1;gap:14px;min-height:0;padding-right:2px;display:flex;overflow:auto}.lab{letter-spacing:-.011em;text-transform:none;color:var(--ink2);justify-content:space-between;align-items:baseline;margin-bottom:6px;font-size:12px;font-weight:500;line-height:1.2;display:flex}.lab b{color:var(--mute);text-transform:none;letter-spacing:0;font-size:12px;font-weight:500}.upload{background:var(--paper);border:1px solid var(--border);border-radius:10px;width:fit-content;max-width:100%;min-height:0;display:block;position:relative;overflow:hidden}.upload.hot{border-color:var(--ink);background:var(--well)}.upload input{opacity:0;cursor:pointer;position:absolute;inset:0}.up-empty,.up-done{min-height:52px}.up-empty{flex-flow:row;justify-content:flex-start;align-items:center;gap:8px;max-width:100%;padding:8px 8px 8px 12px;display:flex}.up-empty .hint,.up-empty .btn{white-space:nowrap;flex:none}.hint{color:var(--mute);font-size:13px;line-height:1.2}.btn{background:var(--paper);border:1px solid var(--border);height:32px;color:var(--ink);letter-spacing:-.011em;white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:13px;font-weight:500;display:inline-flex}.btn.dark{background:var(--ink);color:#fff;border-color:var(--ink)}.btn:hover{background:var(--well)}.btn.dark:hover{color:#fff;background:#2c2433;border-color:#2c2433}.btn:disabled{opacity:.4;cursor:default}.up-done{align-items:center;gap:8px;width:max-content;max-width:100%;padding:8px;display:flex}.up-meta{flex:0 auto;align-items:center;gap:8px;min-width:0;display:flex}.up-copy{min-width:0}.up-meta .btn{flex:none}.thumb{background:var(--photo);border:1px solid var(--border);border-radius:8px;flex:none;width:36px;height:36px;position:relative;overflow:hidden}.thumb img,.shot,.slot img{object-fit:contain;width:100%;min-width:0;height:100%;min-height:0}.fn{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:500;line-height:1.2;overflow:hidden}.dim{font-family:var(--font-mono);color:var(--mute);margin:0;font-size:11px}.upload .btn{white-space:nowrap;border-radius:8px;height:32px;padding:0 12px;font-size:13px}.arrow{letter-spacing:0;text-transform:none;flex:none;font-size:1.05em;font-weight:500;line-height:1;display:inline-block}.field-note{color:var(--mute);margin:6px 0 0;font-size:12px;line-height:1.45}.find-row{align-items:center;gap:8px;display:flex}.find-row .text{flex:1;min-width:0}.find-row .btn{flex:none;height:36px;padding:0 12px}.scene-pick{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;display:grid}.scene-pick button{aspect-ratio:3/4;border:1px solid var(--border);background:var(--paper);border-radius:8px;padding:0;overflow:hidden}.scene-pick button.on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}.scene-pick img{object-fit:cover;width:100%;height:100%;display:block}.need{min-height:0;color:var(--danger);font-size:12px;font-weight:500}.need:empty{display:none}.need:not(:empty){min-height:16px}.seg{background:#f1efe9;border:0;border-radius:9px;gap:0;height:36px;padding:3px;display:flex;position:relative}.seg button{color:var(--mute);letter-spacing:-.011em;white-space:nowrap;background:0 0;border:0;border-radius:7px;flex:auto;padding:0 10px;font-size:13px;font-weight:500;position:relative}.seg button.on{background:var(--paper);color:var(--ink);box-shadow:0 0 0 1px #2119270f}.select,.text{background:var(--paper);border:1px solid var(--border);width:100%;height:36px;color:var(--text);letter-spacing:-.011em;border-radius:8px;padding:0 12px;font-size:14px;font-weight:400}.select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5 6 8l3.5-3.5' fill='none' stroke='%236f6876' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;padding-right:32px}textarea.text{resize:vertical;height:64px;min-height:64px;padding:8px 12px;line-height:1.45}.slider{align-items:center;height:36px;display:flex}.slider input[type=range]{appearance:none;background:linear-gradient(90deg, var(--ink) var(--fill,70%), var(--track) var(--fill,70%));border-radius:999px;outline:none;width:100%;height:2px}.slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:1.5px solid var(--ink);width:14px;height:14px;box-shadow:none;cursor:pointer;background:#fff;border-radius:50%}.slider input[type=range]::-moz-range-thumb{border:1.5px solid var(--ink);width:14px;height:14px;box-shadow:none;cursor:pointer;background:#fff;border-radius:50%}.seedline{font-family:var(--font-mono);color:var(--mute);font-size:12px}.seedline b{color:var(--ink2);font-weight:500}button.run{background:var(--yel);width:100%;height:40px;color:var(--ink);letter-spacing:-.015em;box-shadow:none;border:0;border-radius:10px;flex:none;margin-top:0;font-size:14px;font-weight:600;position:relative;overflow:hidden}button.run:hover{background:#e7f64a}button.run:disabled{cursor:progress}button.run .bar{background:#21192759;width:0;height:2px;position:absolute;bottom:0;left:0}button.run .label{position:relative}.main{background:0 0;border:0;border-radius:0;flex-direction:column;min-width:0;min-height:0;padding:0;display:flex;overflow:hidden}.toolbar{flex-wrap:nowrap;align-items:center;gap:8px;min-height:36px;display:flex}.toolbar .seg{background:#f1efe9;flex:none;width:min(240px,46%)}.toolbar .btn{white-space:nowrap;flex:none}.rmeta{font-family:var(--font-mono);color:var(--mute);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}.sp{flex:1}.preview{background:var(--well);border:1px solid var(--border);border-radius:12px;flex:1;min-height:0;margin-top:12px;position:relative;overflow:hidden}.pv-empty{color:var(--mute);text-align:center;border:1px dashed #21192729;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:20px;font-size:14px;font-weight:400;display:flex;position:absolute;inset:10px}.big{border:1px solid var(--border);width:36px;height:36px;box-shadow:none;color:var(--ink);background:0 0;border-radius:10px;place-items:center;font-size:16px;display:grid}.shot-wrap,.compare,.sprite-stage{position:absolute;inset:0}.shot-wrap{place-items:center;display:grid}.shot-wrap .shot{object-fit:contain;width:100%;max-width:100%;height:100%;max-height:100%;position:absolute;inset:0}.checker{background:repeating-conic-gradient(#e8e4dc 0 25%, #f7f6f3 0 50%) 0 0 / 20px 20px}.compare{touch-action:none;cursor:ew-resize}.compare .shot{position:absolute;inset:0}.clip{position:absolute;inset:0 auto 0 0;overflow:hidden}.clip .shot{max-width:none;height:100%;position:absolute;top:0;left:0}.handle{background:#fff;width:1px;margin-left:0;position:absolute;top:0;bottom:0;box-shadow:0 0 0 1px #21192733}.knob{background:var(--ink);color:#fff;width:32px;height:32px;box-shadow:none;border:1.5px solid #fff;border-radius:50%;place-items:center;margin:-16px 0 0 -16px;font-size:13px;display:grid;position:absolute;top:50%;left:50%}.tag{z-index:2;font-family:var(--font-mono);color:#fff;background:#211927c7;border-radius:999px;padding:3px 8px;font-size:11px;position:absolute;bottom:10px}.tag.b{left:10px}.tag.a{right:10px}.sprite-stage{background:0 0;justify-content:center;align-items:center;padding:20px 24px 44px;display:flex}.sprite-frame{background-repeat:no-repeat;flex:none;position:relative}.cap{text-align:center;font-family:var(--font-mono);color:var(--mute);font-size:12px;position:absolute;bottom:12px;left:0;right:0}.toast{z-index:4;background:var(--ink);color:#fff;box-shadow:none;border-radius:8px;padding:8px 12px;font-size:13px;position:absolute;top:10px;right:10px}.toast b{color:#fff;font-weight:600}.foot{flex:none;align-items:flex-end;gap:16px;margin-top:12px;display:flex}.slots{gap:6px;display:flex}.slot{background:var(--well);border:1px dashed #2119272e;border-radius:8px;width:44px;height:44px;padding:0;position:relative;overflow:hidden}.slot img{display:block}.slot.on{box-shadow:inset 0 0 0 1.5px var(--ink);border-style:solid;border-color:#0000}.slot:disabled{cursor:default}.status{width:min(320px,46%);margin-left:auto;padding-bottom:2px}.st{color:var(--ink2);min-height:18px;font-size:12px;font-weight:400}.st span,.st em{color:var(--mute);font-style:normal}.track{background:var(--track);border-radius:999px;height:3px;margin-top:6px;overflow:hidden}.track i{background:var(--ink);border-radius:inherit;width:0;height:100%;display:block}.dots{flex:none;justify-content:space-between;align-items:center;gap:12px;min-height:22px;margin-top:10px;display:flex}.dotrow{align-items:center;gap:2px;margin-left:auto;display:flex}.dots button{background:0 0;border:0;width:22px;height:22px;padding:0}.dots button:before{content:"";background:#d4cfc6;border-radius:99px;width:5px;height:5px;margin:0 auto;display:block}.dots button.on:before{background:var(--ink);width:16px}.count{font-family:var(--font-mono);color:var(--mute);margin-left:8px;font-size:11px}.foot-note{text-align:left;color:var(--mute);flex:none;margin:0;font-size:12px}.site-footer{border-top:1px solid var(--border);text-align:center;color:var(--mute);letter-spacing:-.006em;flex:none;margin-top:2px;padding:12px 24px 14px;font-size:12px;line-height:1.6}.site-footer p{margin:0}.site-footer a{color:var(--ink);text-underline-offset:2px;font-weight:500;text-decoration:none}.site-footer a:hover{text-decoration:underline;text-decoration-thickness:1px}@media (min-width:981px){.app{height:100vh;overflow:hidden}.site-header{padding-top:12px;padding-bottom:12px}.page{padding-top:0;padding-bottom:0}.hero{padding-top:14px}.header-nav{margin:10px 0 12px}.dots{margin-top:8px}}@media (max-width:980px){.app{height:auto;min-height:100vh;display:block;overflow:clip visible}.site-header{padding:12px}.page{width:min(var(--page), calc(100% - 24px));min-height:auto;padding:0 0 16px;display:block}.hero{padding-top:16px;padding-left:0;padding-right:0}.hero h1{word-break:break-word;font-size:28px}.header-nav{scrollbar-width:none;flex-wrap:nowrap;justify-content:flex-start;margin-top:12px;padding-bottom:2px;overflow-x:auto}.header-nav::-webkit-scrollbar{display:none}.header-nav button{flex:none}.nav-arrow{display:none}.stage-wrap{flex:none;display:block;position:static}.track-viewport{flex:none;height:auto;display:block;overflow:hidden}.reel{flex:none;align-items:flex-start;min-width:max-content;height:auto}.stage{align-self:auto;height:auto;display:block}.stage-body{flex:none;height:auto;display:block}.card{z-index:1;border-radius:14px;flex:none;height:auto;padding:14px;position:relative}.body{grid-template-columns:1fr;gap:16px;display:grid}.panel,.panel-scroll{flex:none;min-height:auto;overflow:visible}.main{overflow:visible}.preview{min-height:240px}.endpoint{display:none}.hd{grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;margin-bottom:12px;display:grid}.hd .tagline,.hd .sp{grid-column:2;min-width:0}.pill{justify-self:end;margin-left:0}button.run{z-index:0;position:relative;bottom:auto}.status{flex:1;width:auto}.toolbar{flex-wrap:wrap;row-gap:8px}.toolbar .seg{width:100%}.toolbar .btn{flex:auto}.dots{z-index:1;margin-top:14px;display:block;position:relative}.dotrow{justify-content:center;margin:8px 0 0}.foot-note{text-align:center;margin-top:4px}.find-row{flex-wrap:wrap}.find-row .btn{width:100%}.up-empty{flex-wrap:wrap;align-items:center}.site-footer{z-index:1;background:0 0;padding:12px 16px 28px;position:relative}}@media (max-width:640px){.foot{flex-direction:column;align-items:stretch;gap:12px}.status{width:100%;margin-left:0}.slots{flex-wrap:wrap}.seg button{padding:0 8px;font-size:13px}.toolbar .btn{min-width:0}.hero p{font-size:14px}.site-header{gap:8px}.brand{max-width:100%}}
