:root{--paper: oklch(.958 .006 240);--desk: oklch(.935 .007 240);--card: oklch(.985 .004 240);--ink: oklch(.27 .03 255);--ink-2: oklch(.46 .025 252);--ink-3: oklch(.63 .018 250);--line: oklch(.86 .01 245);--line-2: oklch(.905 .008 245);--blue: oklch(.56 .13 250);--blue-2: oklch(.88 .045 240);--hover: oklch(0 0 0 / .045);--dur-fast: .12s;--dur-slow: .3s;--spring: cubic-bezier(.34, 1.56, .64, 1);--serif: "Noto Serif SC", serif;--display: "Instrument Serif", serif;--mono: "DM Mono", ui-monospace, monospace;--sans: "Noto Sans SC", system-ui, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font:400 13px/1.5 var(--sans);-webkit-font-smoothing:antialiased;overflow:hidden}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}button:disabled{cursor:default;opacity:.35}::selection{background:var(--blue-2)}.app{display:grid;grid-template-columns:252px minmax(0,1fr) 268px;grid-template-rows:56px minmax(0,1fr) 104px;grid-template-areas:"top top top" "left center right" "tree tree tree";height:100vh}.top{grid-area:top;display:flex;align-items:center;gap:24px;padding:0 20px;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:baseline;gap:8px;width:212px;flex:none}.b-zh{font:500 20px/1 var(--serif);letter-spacing:.18em}.b-en{font:italic 400 18px/1 var(--display);color:var(--ink-3)}.arches{display:flex;gap:4px;flex:1;justify-content:center}.chip{height:28px;padding:0 12px;border-radius:14px;font-size:12px;letter-spacing:.08em;color:var(--ink-2);transition:background var(--dur-fast) ease,color var(--dur-fast) ease}.chip:hover:not(:disabled){background:var(--hover)}.chip.on{outline:1px solid var(--ink);outline-offset:-1px;color:var(--ink)}.acts{display:flex;gap:4px;flex:none}.act{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:4px;font-size:12px;letter-spacing:.06em;color:var(--ink-2);transition:background var(--dur-fast) ease}.act:hover:not(:disabled){background:var(--hover)}.act.on{outline:1px solid var(--blue);outline-offset:-1px;color:var(--blue)}.act.solid{background:var(--ink);color:var(--card);margin-left:8px}.act.solid:hover:not(:disabled){background:#0c1723}.left,.right{overflow-y:auto;padding:20px 20px 32px;scrollbar-width:thin}.left{grid-area:left;border-right:1px solid var(--line)}.right{grid-area:right;border-left:1px solid var(--line)}.sec+.sec{margin-top:28px}.sec-h{display:flex;align-items:baseline;gap:8px;margin:0 0 12px;font:500 12px/1 var(--sans);letter-spacing:.16em}.sec-h i{font:400 10px/1 var(--mono);font-style:normal;letter-spacing:.1em;color:var(--ink-3)}.note{margin:8px 0 0;font-size:11px;color:var(--ink-3);letter-spacing:.04em}.tray{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.ph{position:relative;aspect-ratio:1;overflow:hidden;background:var(--desk);border-radius:2px}.ph img{width:100%;height:100%;object-fit:cover;display:block;transition:transform var(--dur-slow) ease}.ph.is-hero{outline:2px solid var(--ink);outline-offset:2px}.ph-star{position:absolute;left:4px;top:4px;width:20px;height:20px;display:grid;place-items:center;border-radius:10px;color:#fff;background:#00000038;opacity:0;transition:opacity var(--dur-fast) ease}.ph.is-hero .ph-star{opacity:1;background:var(--ink)}.ph-acts{position:absolute;right:4px;bottom:4px;display:flex;gap:4px;opacity:0;transition:opacity var(--dur-fast) ease}.ph-acts button{width:22px;height:22px;display:grid;place-items:center;border-radius:11px;background:#ffffffe0;color:var(--ink)}.ph-acts button:hover:not(:disabled){background:#fff}.ph:hover .ph-acts,.ph:hover .ph-star{opacity:1}.ph-badge{position:absolute;left:4px;bottom:4px;font:500 10px/16px var(--sans);padding:0 4px;background:#ffffffe6;border-radius:2px}.pr-bg{fill:none;stroke:#ffffff4d;stroke-width:2}.pr-fg{fill:none;stroke:#fff;stroke-width:2;stroke-dasharray:88;transition:stroke-dashoffset var(--dur-slow) ease}.ph-add{display:grid;place-items:center;border:1px dashed var(--line);background:transparent;color:var(--ink-3);cursor:pointer;transition:background var(--dur-fast) ease}.ph-add:hover{background:var(--hover)}.field{display:block;margin-bottom:12px}.field span{display:block;font-size:11px;color:var(--ink-3);letter-spacing:.12em;margin-bottom:4px}.field input,.field textarea{width:100%;border:0;border-bottom:1px solid var(--line);background:transparent;padding:4px 0 6px;font:400 14px/1.6 var(--serif);color:var(--ink);resize:none;outline:none;transition:border-color var(--dur-fast) ease}.field input:focus,.field textarea:focus{border-bottom-color:var(--ink)}.field textarea::placeholder{color:var(--ink-3);font-family:var(--sans);font-size:12px}.check{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-2);cursor:pointer;-webkit-user-select:none;user-select:none}.check input{display:none}.check-box{width:12px;height:12px;border:1px solid var(--ink-2);border-radius:2px;position:relative;transition:background var(--dur-fast) ease}.check input:checked+.check-box{background:var(--ink);border-color:var(--ink)}.check input:checked+.check-box:after{content:"";position:absolute;left:3px;top:0;width:3px;height:7px;border:solid var(--card);border-width:0 1px 1px 0;transform:rotate(45deg)}.center{grid-area:center;display:grid;grid-template-columns:minmax(0,1fr) 96px;background:radial-gradient(circle,oklch(0 0 0 / .06) .6px,transparent .8px) 0 0 / 16px 16px,var(--desk);min-height:0}.stage-col{display:flex;flex-direction:column;min-height:0;padding:24px 0 12px 24px}.stage{flex:1;min-height:0;display:grid;place-items:center}.poster{position:relative;background:var(--card);box-shadow:0 1px 2px #222f3c14,0 24px 60px -24px #1e2f4152}.poster canvas{position:absolute;top:0;right:0;bottom:0;left:0;display:block}.overlay{cursor:default;touch-action:none}.overlay.mode-flow{cursor:crosshair}.poster-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;font:400 13px var(--sans);letter-spacing:.3em;color:var(--ink-3)}.tools{position:absolute;z-index:5;display:flex;gap:2px;padding:4px;background:var(--card);border-radius:6px;box-shadow:0 1px 2px #222f3c26,0 8px 24px -8px #222f3c4d;animation:pop .2s var(--spring)}.tools button{width:28px;height:28px;display:grid;place-items:center;border-radius:4px;color:var(--ink-2);transition:background var(--dur-fast) ease}.tools button:hover{background:var(--hover)}.tools button.on{outline:2px solid var(--blue);outline-offset:-1px;color:var(--blue)}@keyframes pop{0%{transform:translateY(4px) scale(.96);opacity:0}}.tools button.labeled{width:auto;display:inline-flex;gap:4px;padding:0 8px;font-size:12px;letter-spacing:.08em}.tools-sep{width:1px;margin:4px 2px;background:var(--line)}.blendmenu{position:absolute;left:0;top:calc(100% + 6px);display:flex;flex-direction:column;gap:4px;padding:6px;background:var(--card);border-radius:8px;box-shadow:0 1px 2px #222f3c26,0 12px 32px -10px #222f3c66;animation:pop .2s var(--spring);white-space:nowrap}.blendmenu-row{display:flex;gap:2px}.blendmenu-row+.blendmenu-row{border-top:1px solid var(--line-2);padding-top:4px}.tools .blendmenu button{width:auto;display:inline-flex;align-items:center;gap:6px;padding:0 10px;font-size:12px;letter-spacing:.08em}.bsw{position:relative;width:18px;height:12px;isolation:isolate;flex:none}.bsw i{position:absolute;top:0;width:12px;height:12px;border-radius:50%}.bsw i:first-child{left:0}.bsw i:last-child{left:6px}.overlay.tool-point{cursor:copy}.overlay.tool-box{cursor:crosshair}.overlay.tool-erase,.overlay.tool-keep{cursor:none}.cutting{position:absolute;z-index:4;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:#0f171f61;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);pointer-events:none;font:400 12px var(--sans);letter-spacing:.2em;color:#fff}.cutting svg{width:36px;height:36px;transform:rotate(-90deg)}.cutting span{animation:breathe 1.6s ease-in-out infinite}@keyframes breathe{50%{opacity:.5}}.pr-fg.spin{transform-origin:18px 18px;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.maskbar{position:absolute;z-index:5;left:50%;bottom:16px;transform:translate(-50%);display:flex;flex-direction:column;gap:6px;padding:6px;background:var(--card);border-radius:8px;box-shadow:0 1px 2px #222f3c26,0 12px 32px -10px #222f3c66;animation:pop .24s var(--spring);white-space:nowrap}.seg{display:flex;padding:2px;background:var(--desk);border-radius:6px}.seg button{height:28px;padding:0 12px;border-radius:4px;font-size:12px;letter-spacing:.1em;color:var(--ink-2);transition:background var(--dur-fast) ease}.seg button:hover{background:var(--hover)}.seg button.on{background:var(--card);color:var(--ink);box-shadow:0 1px 2px #222f3c26}.maskbar-row{display:flex;align-items:center;gap:8px}.maskbar-row+.maskbar-row{padding:0 2px 0 8px}.maskbar .btn{height:28px;padding:0 12px}.maskbar .btn.ghost{margin-left:auto}.range{display:flex;align-items:center;gap:2px;padding:2px;border-radius:6px;background:var(--desk)}.range button{width:28px;height:28px;display:grid;place-items:center;border-radius:4px;transition:background var(--dur-fast) ease}.range button span{display:block;border-radius:50%;border:1px solid var(--ink-2)}.range button:hover:not(:disabled){background:var(--hover)}.range button.on{background:var(--card);box-shadow:0 1px 2px #222f3c26}.range button.on span{background:var(--ink);border-color:var(--ink)}.maskbar-state{width:6px;height:6px;margin:0 6px 0 auto;border-radius:50%;background:var(--line);transition:background var(--dur-fast) ease}.maskbar-state.on{background:var(--blue);animation:breathe .8s ease-in-out infinite}.mslider{display:flex;align-items:center;gap:6px;font:400 11px/1 var(--serif);color:var(--ink-3)}.mslider input{width:84px;accent-color:var(--ink)}.hud{height:32px;display:flex;align-items:center;justify-content:center;gap:16px;font:400 10px/1 var(--mono);letter-spacing:.08em;color:var(--ink-3);text-transform:uppercase}.hud b{font-weight:400;color:var(--ink)}.hud-arche{font:500 11px/1 var(--sans);letter-spacing:.2em;color:var(--ink)}.hud-hint{font:400 12px/1 var(--sans);letter-spacing:.1em;text-transform:none;color:var(--ink-2)}.link{font:400 11px var(--sans);color:var(--blue);text-decoration:underline;text-underline-offset:3px}.variants{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 0;overflow-y:auto;scrollbar-width:none}.variants-h{font:400 10px/1 var(--mono);letter-spacing:.2em;color:var(--ink-3)}.var{position:relative;display:block;transition:transform var(--dur-fast) ease}.var canvas{display:block;box-shadow:0 1px 2px #222f3c1f,0 6px 14px -8px #222f3c4d}.var i{display:block;margin-top:4px;font:400 10px/1 var(--sans);font-style:normal;letter-spacing:.2em;text-align:center;color:var(--ink-3)}.var.on canvas{outline:2px solid var(--blue);outline-offset:2px}.var.on i{color:var(--ink)}.mood{position:relative;aspect-ratio:1;background:radial-gradient(circle,oklch(0 0 0 / .14) .7px,transparent 1px) 0 0 / 12px 12px,var(--card);border:1px solid var(--line);border-radius:2px;cursor:crosshair;touch-action:none;overflow:hidden}.mood-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.mood-cross{stroke:var(--blue);stroke-width:.35;vector-effect:non-scaling-stroke;opacity:.45}.mood-trail{fill:none;stroke:var(--blue);stroke-width:1;vector-effect:non-scaling-stroke;opacity:.4;stroke-linecap:round;stroke-linejoin:round}.mood-dot{position:absolute;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--blue);box-shadow:0 0 0 6px #2d78bd24,0 0 0 14px #2d78bd0f;pointer-events:none;transition:left var(--dur-slow) ease,top var(--dur-slow) ease}.mood.is-drag .mood-dot{transition:none}.mood-l{position:absolute;font:400 11px/1 var(--serif);color:var(--ink-3);pointer-events:none}.mood-l.t{top:8px;left:50%;transform:translate(-50%)}.mood-l.b{bottom:8px;left:50%;transform:translate(-50%)}.mood-l.l{left:8px;top:50%;transform:translateY(-50%)}.mood-l.r{right:8px;top:50%;transform:translateY(-50%)}.dials{display:grid;grid-template-columns:repeat(3,1fr);gap:12px 0}.dials .dial-svg{width:68px;height:68px}.dials .dial-label i{display:none}.dial{display:flex;flex-direction:column;align-items:center}.dial-svg{width:76px;height:76px;cursor:ns-resize;touch-action:none}.tick{stroke:var(--line);stroke-width:1;stroke-linecap:round;transition:stroke var(--dur-fast) ease}.tick.on{stroke:var(--ink)}.dial-face{fill:var(--card);stroke:var(--line);stroke-width:1;transition:stroke var(--dur-fast) ease}.dial:hover .dial-face,.dial.is-active .dial-face{stroke:var(--ink-3)}.dial-hand{transform-origin:40px 40px;transition:transform var(--dur-slow) var(--spring)}.dial-hand line{stroke:var(--ink);stroke-width:1.5;stroke-linecap:round}.dial-hand circle{fill:var(--blue)}.dial-label{display:flex;align-items:baseline;gap:4px;margin-top:2px}.dial-label span{font:500 12px/1 var(--sans);letter-spacing:.14em}.dial-label i{font:italic 400 12px/1 var(--display);color:var(--ink-3)}.dial-label b{font:400 10px/1 var(--mono);color:var(--ink-3);min-width:16px;text-align:right}.vibe-drop{display:flex;flex-direction:column;gap:4px;padding:20px 16px;border:1px dashed var(--line);border-radius:2px;cursor:pointer;text-align:center;transition:background var(--dur-fast) ease}.vibe-drop:hover,.vibe-drop.is-over{background:var(--hover)}.vibe-drop span{font-size:12px;letter-spacing:.08em;color:var(--ink-2)}.vibe-drop i{font-style:normal;font-size:11px;color:var(--ink-3)}.vibe{display:flex;gap:12px;align-items:stretch}.vibe img{width:64px;height:80px;object-fit:cover;border-radius:2px;flex:none}.vibe-side{flex:1;display:flex;flex-direction:column;justify-content:space-between;padding:2px 0}.vibe-sw{display:flex;height:20px;border-radius:2px;overflow:hidden}.vibe-sw span{display:block}.pal{display:flex;align-items:flex-end;gap:12px}.pal-sw{display:flex;flex-direction:column;align-items:center;gap:4px}.pal-sw span{width:32px;height:32px;border-radius:50%;box-shadow:inset 0 0 0 1px #00000014}.pal-sw i{font:400 11px/1 var(--serif);font-style:normal;color:var(--ink-3)}.icon-btn{width:28px;height:28px;display:grid;place-items:center;border-radius:4px;color:var(--ink-2);transition:background var(--dur-fast) ease;flex:none}.icon-btn:hover:not(:disabled){background:var(--hover)}.pal .icon-btn{margin-left:auto;margin-bottom:16px}.tree{grid-area:tree;display:flex;border-top:1px solid var(--line);min-width:0}.tree-h{width:64px;flex:none;display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:16px;border-right:1px solid var(--line-2);font:500 12px/1 var(--sans);letter-spacing:.2em;writing-mode:horizontal-tb}.tree-scroll{flex:1;overflow:auto;padding:8px 12px;scrollbar-width:thin}.tree-canvas{position:relative}.tree-lines{position:absolute;top:0;right:0;bottom:0;left:0}.tree-lines path{fill:none;stroke:var(--line);stroke-width:1}.tree-node{position:absolute;display:block;border-radius:1px;overflow:hidden;box-shadow:0 1px 2px #222f3c24;transition:transform var(--dur-fast) ease}.tree-node img{width:100%;height:100%;object-fit:cover;display:block}.tree-node.is-cur{outline:2px solid var(--blue);outline-offset:2px}.duel{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;background:#eef2f5f0;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:fade .4s ease}@keyframes fade{0%{opacity:0}}.duel-head{display:flex;align-items:baseline;gap:16px}.duel-q{font:500 22px/1 var(--serif);letter-spacing:.3em}.duel-n{font:400 11px/1 var(--mono);color:var(--ink-3);letter-spacing:.1em}.duel-pair{display:flex;gap:48px}.duel-card{position:relative;background:var(--card);box-shadow:0 1px 2px #222f3c1a,0 24px 50px -24px #1e2f4159;transition:opacity var(--dur-slow) ease,transform var(--dur-slow) var(--spring)}.duel-card canvas{display:block}.duel-card:hover{outline:1px solid var(--ink-3);outline-offset:6px}.duel-card.is-win{outline:2px solid var(--blue);outline-offset:6px;transform:scale(1.02)}.duel-card.is-lose{opacity:.25}.duel-key{position:absolute;bottom:-28px;left:50%;transform:translate(-50%);font:400 12px/1 var(--mono);font-style:normal;color:var(--ink-3)}.duel-wait{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(100deg,var(--card) 30%,var(--desk) 50%,var(--card) 70%) 0 0 / 300% 100%;animation:shimmer 1.2s linear infinite}@keyframes shimmer{to{background-position:-150% 0}}.duel-foot{display:flex;align-items:flex-end;gap:64px;margin-top:12px}.taste{display:grid;grid-template-columns:repeat(4,112px);gap:8px 24px}.taste-row{display:flex;align-items:center;gap:8px}.taste-row span{font-size:11px;color:var(--ink-2);letter-spacing:.1em;width:28px;flex:none}.taste-bar{flex:1;height:2px;background:var(--line)}.taste-bar b{display:block;height:100%;background:var(--ink);transition:width var(--dur-slow) ease}.duel-acts{display:flex;gap:8px}.btn{height:32px;padding:0 16px;border-radius:4px;font-size:12px;letter-spacing:.1em;transition:background var(--dur-fast) ease}.btn.ghost{color:var(--ink-2)}.btn.ghost:hover{background:var(--hover)}.btn.solid{background:var(--ink);color:var(--card)}.btn.solid:hover{background:#0c1723}.dropveil{position:fixed;top:12px;right:12px;bottom:12px;left:12px;z-index:30;display:grid;place-items:center;border:1px dashed var(--ink-3);border-radius:4px;background:#eef2f5b3;pointer-events:none;font:400 14px var(--serif);letter-spacing:.3em;color:var(--ink-2)}.chip,.act,.hud>*,.sec-h{white-space:nowrap}.hud{overflow:hidden}@media (max-width: 1280px){.app{grid-template-columns:224px minmax(0,1fr) 244px}.brand{width:auto}.top{gap:16px}.act-t{display:none}.act{padding:0 8px}.act.solid .act-t{display:inline}}@media (max-width: 1000px){body{overflow:auto}.app{height:auto;grid-template-columns:minmax(0,1fr);grid-template-rows:auto 78vh auto auto 104px;grid-template-areas:"top" "center" "right" "left" "tree"}.top{flex-wrap:wrap;padding:12px 16px;row-gap:8px}.arches{order:3;flex-basis:100%;overflow-x:auto;justify-content:flex-start;scrollbar-width:none}.acts{margin-left:auto}.left,.right{border:0;border-top:1px solid var(--line);overflow:visible;padding:20px 16px}.center{grid-template-columns:minmax(0,1fr) 80px}.stage-col{padding:16px 0 8px 16px}.hud{gap:12px}.taste{grid-template-columns:repeat(2,112px)}.duel-pair{gap:16px}.duel-foot{flex-direction:column;align-items:center;gap:16px}}
