:root{box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);--bg:#eef0eb;--panel:#fbfcf9;--field:#fff;--ink:#1d2a1f;--muted:#69735f;--line:#dadfd3;--accent:#4f7a3a;--accent-ink:#fff;--accent-soft:#e4eedb;--warn:#a8462f;--stage:#282d29;--stage-ink:#c3cbbd;--radius:10px;color:var(--ink);background:var(--bg);font-family:Bricolage Grotesque,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:14px;line-height:1.45}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#151915;--panel:#1c211d;--field:#252b26;--ink:#e5eae1;--muted:#9ba493;--line:#333b34;--accent:#8db86f;--accent-ink:#12200e;--accent-soft:#2a3826;--warn:#e48a70;--stage:#101310;--stage-ink:#9ea898}}:root[data-theme=dark]{--bg:#151915;--panel:#1c211d;--field:#252b26;--ink:#e5eae1;--muted:#9ba493;--line:#333b34;--accent:#8db86f;--accent-ink:#12200e;--accent-soft:#2a3826;--warn:#e48a70;--stage:#101310;--stage-ink:#9ea898}*,:before,:after{box-sizing:inherit}html{height:100%;scroll-padding-top:env(safe-area-inset-top,0px)}body{background:var(--bg);min-height:100%;margin:0}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app{height:100vh;grid-template-columns:minmax(320px,390px) 1fr;height:100dvh;display:grid}.sidebar{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;min-width:0;min-height:0;display:flex}.brand{padding:22px 22px 14px}.brand h1{white-space:nowrap;letter-spacing:-.02em;margin:0;font-size:21px;font-weight:800}.brand p{color:var(--muted);max-width:34ch;margin:4px 0 0;font-size:13px}.tabs{background:var(--bg);border-radius:10px;grid-template-columns:repeat(3,minmax(0,1fr));gap:2px;margin:0 16px;padding:3px;display:grid}.tabs button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:7px 4px;font-size:13px;font-weight:600}.tabs button.on{background:var(--field);color:var(--ink);box-shadow:0 1px 2px #00000014}.tab-body{overflow-anchor:auto;flex:1;min-width:0;min-height:0;padding:6px 22px 40px;overflow:hidden auto}.panel{flex-direction:column;min-width:0;display:flex}.block{border:0;border-bottom:1px solid var(--line);min-width:0;margin:0;padding:16px 0}.block:last-child{border-bottom:0}.block h3{margin:0 0 10px;font-size:15px;font-weight:700}.block-head{justify-content:space-between;align-items:baseline;gap:8px;display:flex}fieldset.block:disabled{opacity:.5}.muted{color:var(--muted)}.small{margin:8px 0 0;font-size:12px}.row-actions{gap:12px;display:flex}.field{margin-bottom:12px}.field-label{color:var(--muted);margin-bottom:5px;font-size:12.5px;font-weight:600;display:block}.field-hint{color:var(--muted);margin:4px 0 0;font-size:12px}input[type=text],input[type=number],select,textarea{background:var(--field);border:1px solid var(--line);border-radius:8px;width:100%;min-width:0;padding:7px 9px}textarea{resize:vertical}.wh{align-items:center;gap:6px;display:flex}.wh input{width:100%}.btn{border:1px solid var(--line);background:var(--field);border-radius:var(--radius);cursor:pointer;justify-content:center;align-items:center;gap:7px;width:100%;margin-top:8px;padding:10px 14px;font-weight:600;display:inline-flex}.btn:hover:not(:disabled){border-color:var(--accent)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn.primary:hover:not(:disabled){filter:brightness(1.07)}.btn.ghost{background:0 0}.btn.sm{width:auto;margin-top:0;padding:6px 11px;font-size:13px}.btn.on-dark{color:#e8ece4;border-color:#ffffff38}.link{color:var(--accent);cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:600}.link:disabled{opacity:.4;cursor:not-allowed}.link.danger{color:var(--warn)}.seg{border:1px solid var(--line);background:var(--field);border-radius:8px;display:flex;overflow:hidden}.seg button{cursor:pointer;white-space:nowrap;background:0 0;border:0;flex:1;padding:7px 6px;font-size:13px}.seg button+button{border-left:1px solid var(--line)}.seg button.on{background:var(--accent);color:var(--accent-ink)}.range{align-items:center;gap:10px;display:flex}.range input{accent-color:var(--accent);flex:1}.range output{text-align:right;font-variant-numeric:tabular-nums;width:44px;color:var(--muted);font-size:13px}.toggle{cursor:pointer;align-items:center;gap:10px;font-weight:700;display:flex;position:relative}.toggle input{opacity:0;pointer-events:none;width:1px;height:1px;margin:0;position:absolute;top:50%;left:0}.toggle-track{background:var(--line);border-radius:11px;width:38px;height:22px;transition:background .15s;position:relative}.toggle-track span{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .15s;position:absolute;top:3px;left:3px}.toggle input:checked+.toggle-track{background:var(--accent)}.toggle input:checked+.toggle-track span{transform:translate(16px)}.toggle input:focus-visible+.toggle-track{outline:2px solid var(--accent);outline-offset:2px}.group-list{flex-wrap:wrap;gap:6px;display:flex}.group-chip{border:1px solid var(--line);background:var(--field);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:5px 11px;font-size:13px;display:inline-flex}.group-chip.on{border-color:var(--accent);background:var(--accent-soft);font-weight:600}.group-chip .dot{background:var(--accent);min-width:18px;height:18px;color:var(--accent-ink);border-radius:9px;place-items:center;padding:0 5px;font-size:11px;font-style:normal;display:inline-grid}.inline-form{gap:6px;margin-top:10px;display:flex}.bulk{border:1.5px dashed var(--line);border-radius:var(--radius);color:var(--muted);cursor:pointer;align-items:flex-start;gap:10px;margin-bottom:12px;padding:12px;font-size:12.5px;display:flex}.bulk strong{color:var(--ink)}.bulk svg{color:var(--accent);flex:none;margin-top:1px}.bulk.over,.bulk:hover{border-color:var(--accent);background:var(--accent-soft)}.slots{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.slot{border:1px solid var(--line);border-radius:var(--radius);background:var(--field);transition:opacity .15s;position:relative;overflow:hidden}.slot.unused{opacity:.5}.slot.over{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}.slot-hit{aspect-ratio:16/10;background:var(--bg);cursor:pointer;width:100%;color:var(--muted);border:0;place-items:center;padding:0;display:grid}.slot-hit img{object-fit:cover;object-position:top;width:100%;height:100%;display:block}.slot-meta{justify-content:space-between;gap:6px;padding:6px 9px;font-size:12px;display:flex}.slot-meta span{color:var(--muted);font-variant-numeric:tabular-nums}.slot-x{color:#fff;cursor:pointer;background:#141814b8;border:0;border-radius:50%;place-items:center;width:24px;height:24px;display:grid;position:absolute;top:6px;right:6px}.thumbs{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.thumb{border:1px solid var(--line);background:var(--field);border-radius:var(--radius);cursor:pointer;text-align:left;padding:5px}.thumb canvas{background:var(--bg);border-radius:6px;width:100%;height:auto;display:block}.thumb span{padding:6px 3px 2px;font-size:12.5px;font-weight:600;display:block}.thumb.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}.chips{flex-wrap:wrap;gap:6px;margin-bottom:12px;display:flex}.chip{border:1px solid var(--line);background:var(--field);cursor:pointer;border-radius:8px;padding:5px 10px;font-size:12.5px}.chip.on{border-color:var(--accent);background:var(--accent-soft);font-weight:600}.swatches{flex-wrap:wrap;gap:7px;display:flex}.sw{border:2px solid var(--panel);width:30px;height:30px;box-shadow:0 0 0 1px var(--line);cursor:pointer;border-radius:50%;padding:0}.sw.auto{background:conic-gradient(#8fae76,#5c97b2,#b77a5d,#2f7f7a,#8fae76)}.sw.on{box-shadow:0 0 0 2px var(--accent)}.color-pair{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.color-pair .seg{flex:1}.color-pair .grow{flex:1;min-width:0}input[type=color]{border:1px solid var(--line);background:var(--field);cursor:pointer;border-radius:8px;width:38px;height:32px;padding:2px}.checks{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px;margin-bottom:4px;display:grid}.check{cursor:pointer;align-items:center;gap:7px;font-size:13px;display:flex}.check input{accent-color:var(--accent)}.filename{color:var(--muted);word-break:break-all;font-variant-numeric:tabular-nums;margin:12px 0 0;font-size:12px}.progress{margin-top:12px}.bar{background:var(--line);border-radius:3px;height:6px;overflow:hidden}.bar span{background:var(--accent);height:100%;transition:width .2s;display:block}.progress-row{color:var(--muted);justify-content:space-between;margin-top:6px;font-size:12.5px;display:flex}.stage{background:var(--stage);flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.stage.over:after{content:"";border:2px dashed var(--accent);pointer-events:none;border-radius:14px;position:absolute;top:12px;bottom:12px;left:12px;right:12px}.stage-bar{color:#e8ece4;justify-content:space-between;align-items:center;gap:12px;padding:14px 22px;display:flex}.stage-title strong{font-size:16px;display:block}.stage-title span{color:var(--stage-ink);font-variant-numeric:tabular-nums;font-size:12.5px}.stage-actions{gap:8px;display:flex}.canvas-wrap{flex:1;min-height:0;margin:8px 28px 0;position:relative}.canvas-wrap.fit{justify-content:center;align-items:center;display:flex;overflow:hidden}.canvas-wrap.actual{overflow:auto}.canvas-wrap.actual canvas{margin:0 auto}.canvas-wrap canvas{border-radius:4px;display:block;box-shadow:0 24px 70px #00000073}canvas.checker{background:repeating-conic-gradient(#d9d9d9 0% 25%,#f4f4f4 0% 50%) 0 0/22px 22px}.stage-hint{text-align:center;color:var(--stage-ink);margin:0;padding:12px 22px 16px;font-size:12.5px}.toast{left:50%;bottom:calc(22px + env(safe-area-inset-bottom,0px));background:var(--ink);color:var(--panel);opacity:0;pointer-events:none;z-index:10;border-radius:999px;padding:9px 16px;font-size:13px;transition:opacity .18s,transform .18s;position:fixed;transform:translate(-50%,8px)}.toast.on{opacity:1;transform:translate(-50%)}.toast.warn{background:var(--warn);color:#fff}.roles{flex-direction:column;gap:8px;display:flex}.role{border:1px solid var(--line);border-radius:var(--radius);background:var(--field);align-items:center;gap:10px;padding:6px;display:flex}.role-thumb{background:var(--bg);width:54px;height:54px;color:var(--muted);border-radius:6px;flex:none;place-items:center;display:grid;overflow:hidden}.role-thumb img{object-fit:cover;object-position:top left;width:100%;height:100%}.role-body{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.role-name{font-size:12.5px;font-weight:600}.role-body select{padding:5px 7px;font-size:13px}.lib{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.lib-item{border:1px solid var(--line);border-radius:var(--radius);background:var(--field);margin:0;position:relative;overflow:hidden}.lib-item.used{border-color:var(--accent)}.lib-thumb{aspect-ratio:16/10;background:var(--bg);position:relative}.lib-thumb img{object-fit:cover;object-position:top left;width:100%;height:100%;display:block}.lib-n{color:#fff;background:#141814b8;border-radius:10px;place-items:center;min-width:20px;height:20px;padding:0 6px;font-size:11px;font-weight:700;display:grid;position:absolute;top:6px;left:6px}.lib-item.used .lib-n{background:var(--accent);color:var(--accent-ink)}.lib-item figcaption{grid-template-columns:1fr auto;gap:4px 6px;padding:6px 8px 8px;font-size:12px;display:grid}.lib-name{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.lib-size{color:var(--muted);font-variant-numeric:tabular-nums}.lib-item select{grid-column:1/-1;padding:4px 6px;font-size:12px}.mini-tabs{border-bottom:1px solid var(--line);gap:4px;margin-bottom:4px;display:flex}.mini-tabs button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:6px 10px;font-size:13px;font-weight:600}.mini-tabs button.on{color:var(--ink);border-bottom-color:var(--accent)}.row-actions.wrap{flex-wrap:wrap;row-gap:6px}.brand-row{justify-content:space-between;align-items:center;gap:10px;display:flex}.projects-modal{width:min(820px,100%)}.pj-body{padding:4px 20px 20px;overflow:auto}.pj-section{border-bottom:1px solid var(--line);padding:16px 0}.pj-section:last-child{border-bottom:0}.pj-section h3{margin:0 0 10px;font-size:15px}.drafts{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;display:grid}.draft{border:1px solid var(--line);border-radius:var(--radius);background:var(--field);flex-direction:column;display:flex;overflow:hidden}.draft.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.draft-thumb{aspect-ratio:4/3;background:var(--bg);color:var(--muted);place-items:center;display:grid}.draft-thumb img{object-fit:cover;width:100%;height:100%;display:block}.draft-info{flex-direction:column;gap:2px;min-width:0;padding:8px 10px 4px;font-size:13px;display:flex}.draft-info strong{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.draft-info .muted{font-size:12px}.draft-actions{flex-wrap:wrap;align-items:center;gap:6px 10px;padding:6px 10px 10px;display:flex}.draft-actions .btn.sm{padding:5px 10px;font-size:12.5px}.pj-file-actions{flex-wrap:wrap;gap:8px;display:flex}.save-modal{width:min(560px,100%)}.save-body{padding:16px 20px 6px;overflow:auto}.modal-foot{border-top:1px solid var(--line);justify-content:flex-end;gap:8px;padding:12px 20px 16px;display:flex}.name-row{align-items:stretch;display:flex}.name-row input{border-radius:8px 0 0 8px}.name-row .ext{border:1px solid var(--line);background:var(--bg);color:var(--muted);border-left:0;border-radius:0 8px 8px 0;place-items:center;padding:0 10px;font-size:13px;display:grid}.save-where{word-break:break-word;margin:4px 0 12px;font-size:13px}.notice{border:1px solid color-mix(in srgb, var(--warn) 45%, transparent);background:color-mix(in srgb, var(--warn) 10%, transparent);border-radius:8px;margin-bottom:12px;padding:10px 12px;font-size:12.5px;line-height:1.5}.chips.tokens{margin:8px 0 0}.chips.tokens .chip{padding:4px 8px;font-size:12px}.folder-row{align-items:center;gap:8px;margin-bottom:8px;display:flex}.folder-name{border:1px dashed var(--line);white-space:nowrap;text-overflow:ellipsis;border-radius:8px;flex:1;min-width:0;padding:7px 10px;font-size:13px;overflow:hidden}.layer-thumb{background:var(--bg);width:44px;height:44px;color:var(--muted);border-radius:6px;flex:none;place-items:center;display:grid;overflow:hidden}.layer-thumb img{object-fit:cover;object-position:top left;width:100%;height:100%}.order-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.order-row .btn.sm{padding:5px 9px;font-size:12px}.chip svg{vertical-align:-2px}.pick-grid{grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:8px;display:grid}.pick{border:1px solid var(--line);background:var(--field);border-radius:var(--radius);cursor:pointer;text-align:left;min-width:0;padding:4px}.pick img{aspect-ratio:4/3;object-fit:cover;object-position:top;border-radius:6px;width:100%;display:block}.pick span{white-space:nowrap;text-overflow:ellipsis;padding:4px 2px 0;font-size:12px;font-weight:600;display:block;overflow:hidden}.pick:hover{border-color:var(--accent)}.hl-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.hl{border:1px solid var(--line);border-radius:var(--radius);background:var(--field)}.hl.on{border-color:var(--accent)}.hl-head{cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:10px;width:100%;padding:8px;display:flex}.crop-thumb{object-fit:contain;background:var(--bg);border-radius:6px;flex:none;width:64px;height:44px}.hl-title{flex-direction:column;min-width:0;font-size:13px;display:flex}.hl-title strong{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.hl-title .muted{font-size:12px}.hl-body{flex-direction:column;gap:10px;padding:4px 12px 12px;display:flex}.hl-fields{border:0;min-width:0;margin:0;padding:0}.hl-fields:disabled{opacity:.5}.modal-back{z-index:20;background:#0c100d9e;place-items:center;padding:20px;display:grid;position:fixed;top:0;bottom:0;left:0;right:0}.modal{background:var(--panel);border-radius:14px;flex-direction:column;width:min(1100px,100%);max-height:100%;display:flex;overflow:hidden;box-shadow:0 30px 80px #0006}.modal-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:16px;padding:16px 20px;display:flex}.modal-head h2{margin:0;font-size:17px}.region-scroll{background:var(--bg);place-items:center;padding:18px;display:grid;overflow:auto}.region-box{-webkit-user-select:none;user-select:none;touch-action:none;cursor:crosshair;position:relative;box-shadow:0 6px 24px #0000002e}.region-box img{pointer-events:none;width:100%;height:100%;display:block}.region{border:2px solid var(--accent);background:color-mix(in srgb, var(--accent) 18%, transparent);border-radius:4px;position:absolute}.region.draft{border-style:dashed}.region-n{background:var(--accent);width:22px;height:22px;color:var(--accent-ink);border-radius:50%;place-items:center;font-size:12px;font-weight:700;display:grid;position:absolute;top:-11px;left:-11px}.region-x{color:#fff;cursor:pointer;background:#1d2a1f;border:0;border-radius:50%;place-items:center;width:22px;height:22px;display:grid;position:absolute;top:-11px;right:-11px}@media (max-width:900px){.app{grid-template-columns:1fr;height:auto}.sidebar{border-right:0;order:2}.tab-body{overflow:visible}.stage{order:1;min-height:60vh}.canvas-wrap{flex:none;height:60vh;margin:8px 14px 0}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important}}.error-box{z-index:30;background:var(--panel);border:1px solid var(--warn);border-radius:12px;flex-direction:column;gap:10px;max-width:min(520px,90vw);padding:16px 18px;display:flex;position:fixed;top:20%;left:50%;transform:translate(-50%);box-shadow:0 20px 60px #00000059}.tab-body .error-box{box-shadow:none;max-width:none;position:static;transform:none}.error-box code{color:var(--warn);word-break:break-word;font-size:12px}.brand-actions{flex:none;gap:6px;display:flex}.reset-body{flex-direction:column;gap:12px;padding-bottom:14px;display:flex}.reset-always{margin:0;font-size:13px;line-height:1.5}.btn.danger-btn{background:var(--warn);border-color:var(--warn);color:#fff}.btn.danger-btn:hover:not(:disabled){filter:brightness(1.08)}
