boxglow 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ .react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#555;--xy-background-pattern-lines-color-default:#333;--xy-background-pattern-cross-color-default:#333;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--font-weight-bold:700;--radius-lg:.5rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}button,input,select,textarea{font:inherit;color:inherit}}@layer components{.card{background:var(--bg-card);border:2px solid var(--line);border-radius:12px}.btn{border:2px solid var(--line);background:var(--bg-card);color:var(--text);cursor:pointer;white-space:nowrap;border-radius:10px;align-items:center;gap:6px;padding:6px 12px;line-height:1.2;transition:transform 80ms,box-shadow 80ms;display:inline-flex}.btn:hover{box-shadow:2px 2px 0 var(--line);transform:translate(-1px,-1px)}.btn:active{box-shadow:none;transform:none}.btn:disabled{opacity:.4;cursor:default;box-shadow:none;transform:none}.btn.btn-primary{background:var(--primary);color:var(--on-primary);border-color:var(--primary-strong)}.btn.btn-accent{background:var(--accent);color:var(--on-accent);border-color:var(--line)}.btn.btn-ghost{background:0 0;border-color:#0000}.btn.btn-ghost:hover{background:var(--primary-soft);box-shadow:none;transform:none}.btn.btn-sm{border-radius:8px;padding:3px 8px;font-size:12px}.btn.btn-danger{color:var(--danger)}.input{border:2px solid var(--line-soft);background:var(--bg-card);border-radius:8px;outline:none;width:100%;padding:6px 10px}.input:focus{border-color:var(--primary)}textarea.input{resize:vertical;min-height:64px}.label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:12px}.chip{border:2px solid var(--line-soft);background:var(--bg-card);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:2px 8px;font-size:12px;display:inline-flex}.chip[data-on=true]{border-color:var(--primary);background:var(--primary-soft)}.avatar{border:2px solid var(--bg-card);color:#fbfbfb;text-shadow:0 0 2px #00000080;border-radius:999px;justify-content:center;align-items:center;width:22px;height:22px;font-size:11px;font-weight:700;display:inline-flex}}@layer utilities{.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.top-2{top:calc(var(--spacing) * 2)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.left-0{left:0}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-30{z-index:30}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.\!table{display:table!important}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.min-h-0{min-height:0}.w-full{width:100%}.min-w-0{min-width:0}.flex-1{flex:1}.flex-none{flex:none}.basis-full{flex-basis:100%}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-5{padding:calc(var(--spacing) * 5)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-1{padding-block:var(--spacing)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-1{padding-left:var(--spacing)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-left{text-align:left}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[26px\]{font-size:26px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.italic{font-style:italic}.underline{text-decoration-line:underline}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}:root{--bg-paper:#eceef0;--bg-card:#fbfbfb;--bg-grid:#0d80800f;--ink:#3a3f46;--ink-strong:#2f343a;--text:#2f343a;--text-muted:#6b7075;--line:#3a3f46;--line-soft:#c9ced4;--primary:#0d8080;--wire:#a86f00;--wire-halo:#52657d;--selection:#52657d;--selection-soft:#52657d33;--attention-bg:#fff0e8;--attention-text:#9b431b;--wire-ready:#1f8a3a;--primary-strong:#006a6a;--primary-soft:#e3f1f0;--primary-soft-2:#cde6e4;--on-primary:#fbfbfb;--accent:#e8875e;--on-accent:#2f343a;--danger:#b3453a;--box-black-bg:#3a3f46;--box-black-text:#e8eaed;--box-black-border:#6b7075;--status-new:#c8ccd2;--box-gray-bg:#deefec;--box-gray-border:#75a8a2;--box-gray-track:#bcd6d2;--box-gray-bg-open:#eef0f2;--box-gray-hatch:#006a6a13;--box-gray-text:#2f343a;--box-white-bg:#fbfbfb;--box-white-text:#2f343a;--box-white-glow:#0d808059;--nest-odd:#f6f7f9;--nest-even:#e9ecef;--shadow-card:4px 4px 0 var(--line);--font-head:"M PLUS Rounded 1c", "Hiragino Maru Gothic ProN", sans-serif;--font-body:"Hiragino Sans", "Noto Sans JP", "Yu Gothic UI", Meiryo, system-ui, sans-serif}:root[data-theme=dark]{--bg-paper:#1a1d21;--bg-card:#23272c;--bg-grid:#3fb5b512;--ink:#4a5058;--ink-strong:#e8eaed;--text:#e8eaed;--text-muted:#a3a9b1;--line:#4a5058;--line-soft:#3a4047;--primary:#3fb5b5;--wire:#e0b24a;--wire-halo:#b7c7df;--selection:#b7c7df;--selection-soft:#b7c7df38;--attention-bg:#493125;--attention-text:#ffb28d;--wire-ready:#52c26b;--primary-strong:#74d3d3;--primary-soft:#1f3536;--primary-soft-2:#24494a;--on-primary:#15181b;--accent:#e8875e;--on-accent:#15181b;--danger:#e07a6e;--box-black-bg:#0f1114;--box-black-text:#c8ccd2;--box-black-border:#5b626b;--status-new:#9aa1a9;--box-gray-bg:#243d3d;--box-gray-border:#527f7b;--box-gray-track:#3d5b58;--box-gray-bg-open:#23272b;--box-gray-hatch:#74d3d313;--box-gray-text:#e8eaed;--box-white-bg:#353c44;--box-white-text:#e8eaed;--box-white-glow:#b7c7df40;--nest-odd:#1c2024;--nest-even:#262b30;--shadow-card:4px 4px 0 #0f1114}html,body,#root{height:100%;margin:0}body{background:var(--bg-paper);color:var(--text);font-family:var(--font-body);letter-spacing:.02em;font-size:14px;line-height:1.6;overflow:hidden}h1,h2,h3,.font-head{font-family:var(--font-head);letter-spacing:.01em;font-weight:800}.bg-block{border:2px solid var(--line);background:var(--box-white-bg);color:var(--box-white-text);box-sizing:border-box;border-radius:12px;transition:background-color .4s,color .4s,border-color .4s,box-shadow .4s;position:relative}.bg-block.selected{box-shadow:0 0 0 3px var(--primary)}.bg-block.dimmed{opacity:.3}.bg-block.status-black{background:var(--box-black-bg);color:var(--box-black-text);border-style:dashed;border-color:var(--box-black-border)}.bg-block.status-gray{background-color:var(--box-gray-bg);background-image:repeating-linear-gradient(135deg, transparent 0 10px, var(--box-gray-hatch) 10px 12px);color:var(--box-gray-text)}.bg-block.status-black .bg-block__port.ready{color:#8fe0e0}.bg-block.expanded{color:var(--text);border-style:solid;border-color:var(--line);background-image:none}.bg-block.expanded.status-white,.bg-block.expanded.status-black,.bg-block.expanded.status-gray{color:var(--text)}.bg-block.expanded.depth-1{background-color:var(--nest-odd);border-width:4px}.bg-block.expanded.depth-2{background-color:var(--nest-even);border-width:3px}.bg-block.expanded.depth-3{background-color:var(--nest-odd);border-width:2px}.bg-block.expanded.depth-4{background-color:var(--nest-even);border-width:2px}:root[data-theme=dark] .bg-block.expanded>.bg-block__head,:root[data-theme=dark] .bg-block.expanded>.bg-block__meta{background:#e8eaed0f}.bg-block.expanded>.bg-block__meta{border-bottom:2px solid var(--line)}.bg-block.status-white{background:var(--box-white-bg);color:var(--box-white-text)}.bg-block.status-white.selected{box-shadow:0 0 0 3px var(--primary)}.bg-block.just-glowed{animation:1.2s ease-out glow}@keyframes glow{0%{box-shadow:0 0 0 0 var(--box-white-glow)}40%{box-shadow:0 0 0 10px transparent, 0 0 36px 10px var(--box-white-glow)}to{box-shadow:0 0 #0000}}.bg-block__head{box-sizing:border-box;align-items:center;gap:8px;height:36px;padding:6px 10px 0 12px;display:flex}.bg-block__meta{box-sizing:border-box;border-bottom:2px solid #0000;align-items:center;gap:6px;height:24px;padding:0 10px 0 12px;display:flex}.bg-block.expanded>.bg-block__meta{border-bottom-color:var(--line-soft)}.bg-block.status-black.expanded>.bg-block__meta{border-bottom-color:var(--box-black-border)}.bg-block__key{opacity:.55;letter-spacing:.04em;margin-left:auto;font-family:ui-monospace,monospace;font-size:10px}.bg-block__due{opacity:.8;border:1.5px solid;border-radius:999px;padding:1px 6px;font-size:10px}.bg-block__due.overdue{background:var(--danger);color:#fbfbfb;border-color:var(--danger);opacity:1}.bg-block__glyph{border:2px solid;border-radius:6px;flex:none;justify-content:center;align-items:center;width:20px;height:20px;font-size:13px;font-weight:800;line-height:1;display:inline-flex}.bg-block__title{min-width:0;font-family:var(--font-head);white-space:normal;word-break:auto-phrase;overflow-wrap:anywhere;flex:1;font-size:14px;font-weight:800;line-height:18px}.bg-block__badge{opacity:.8;border:1.5px solid;border-radius:999px;flex:none;padding:1px 6px;font-size:10px}.bg-block__toggle{cursor:pointer;opacity:.8;background:0 0;border:1.5px solid;border-radius:6px;flex:none;width:22px;height:22px;font-size:12px;line-height:1}.bg-block__toggle:hover{opacity:1;background:#7f7f7f26}.bg-block__ports{grid-template-columns:auto auto;justify-content:space-between;gap:0 16px;padding:0 10px 0 12px;display:grid}.bg-block__port{opacity:.85;white-space:nowrap;height:26px;font-size:11px;line-height:26px}.bg-block__port.out{text-align:right}.bg-block__port.optional{opacity:.8}.bg-block__port .opt{opacity:.7;margin-left:3px;font-size:9px}.bg-block__port.promoted{opacity:.75;font-style:italic}.bg-block__port-outside{background:var(--bg-card);border:1.5px solid var(--line-soft);color:var(--text);white-space:nowrap;pointer-events:none;border-radius:6px;padding:3px 6px;font-size:11px;line-height:1;position:absolute;transform:translateY(-50%)}.bg-block__port-outside.left{right:calc(100% + 10px)}.bg-block__port-outside.right{left:calc(100% + 10px)}.bg-block.expanded .bg-block__port-outside{opacity:0;transition:opacity .15s}.bg-block.expanded.selected .bg-block__port-outside,.bg-block.expanded:hover .bg-block__port-outside{opacity:1}.bg-block__progress{background:var(--line-soft);border-radius:999px;height:8px;position:absolute;bottom:6px;left:16px;right:16px;overflow:hidden;box-shadow:inset 0 0 0 1px #0000001f}.bg-block__progress>span{background:var(--text);height:100%;transition:width .4s;display:block}.bg-block__avatars{flex:none;display:inline-flex}.bg-block__avatars .avatar{width:20px;height:20px;margin-left:-6px;font-size:10px}.bg-block__avatars .avatar:first-child{margin-left:0}.bg-block.kind-project{background:var(--bg-paper);border:3px solid var(--line);color:var(--text);box-shadow:var(--shadow-card);background-image:none;border-style:solid}.bg-block.kind-project>.bg-block__head{background:var(--bg-card);border-radius:9px 9px 0 0}.bg-block.kind-project>.bg-block__meta{background:var(--bg-card);border-bottom-color:var(--line)}.bg-block__tag{background:var(--primary);color:var(--on-primary);letter-spacing:.06em;border-radius:6px;flex:none;padding:2px 6px;font-size:10px;font-weight:800}.bg-block.has-cat:before{content:"";background:var(--cat);pointer-events:none;z-index:3;border-radius:9px 9px 0 0;height:5px;position:absolute;top:0;left:0;right:0}.bg-block.has-cat.status-black:before{border-radius:8px 8px 0 0}.bg-block__cat{background:var(--cat);color:#fbfbfb;letter-spacing:.04em;white-space:nowrap;border-radius:6px;flex:none;padding:3px 6px;font-size:10px;font-weight:800;line-height:1}.cat-chip{--cat:var(--line)}.cat-chip[data-on=true]{background:var(--cat);color:#fbfbfb;border-color:var(--cat)}.cat-chip__dot{background:var(--cat);border-radius:3px;flex:none;width:10px;height:10px}.bg-block__cat.neutral,.cat-chip.neutral[data-on=true]{color:inherit;background:0 0;border:1.5px solid}.bg-block__cat.neutral{padding:1.5px 5px}.cat-chip.neutral .cat-chip__dot{border:1.5px solid var(--cat);background:0 0}.cat-chip[data-on=true] .cat-chip__dot{background:#fbfbfb}.status-icon{flex:none}.status-icon.new circle{stroke:var(--status-new)}.status-icon.progress circle{stroke:var(--primary)}.status-icon.progress path,.status-icon.done circle{fill:var(--primary)}.dec-head{border:2px solid var(--line-soft);background:var(--bg-paper);cursor:pointer;border-radius:10px;align-items:center;gap:8px;padding:6px 8px;display:flex}.dec-head:hover{border-color:var(--primary)}.dec-key{background:var(--primary);color:var(--on-primary);border-radius:6px;flex:none;padding:2px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:800}.canvas-tabs{border-top:2px solid var(--line);background:var(--bg-card);flex:none;align-items:stretch;gap:8px;padding:0 12px 6px;display:flex;position:relative}.tab-nav{flex:none;align-items:center;gap:2px;padding-top:4px;display:flex}.tab-nav-btn{width:26px;height:26px;color:var(--text);cursor:pointer;background:0 0;border:2px solid #0000;border-radius:8px;font-size:11px;line-height:1}.tab-nav-btn:hover:not(:disabled),.tab-nav-btn[data-on=true]{background:var(--bg-paper);border-color:var(--line-soft)}.tab-nav-btn:disabled{opacity:.3;cursor:default}.tab-strip{scrollbar-width:none;flex:1;align-items:flex-start;gap:4px;min-width:0;display:flex;overflow-x:auto}.tab-strip::-webkit-scrollbar{display:none}.canvas-tab{border:2px solid var(--line-soft);background:var(--bg-paper);max-width:240px;color:var(--text-muted);white-space:nowrap;cursor:pointer;border-top:0;border-radius:0 0 10px 10px;flex:none;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:700;display:inline-flex}.canvas-tab .status-icon{width:14px;height:14px}.canvas-tab[data-on=true]{background:var(--bg-card);color:var(--text);border-color:var(--line);margin-top:-2px;padding-top:8px}.scope-path{z-index:10;border:2px solid var(--line);background:var(--bg-card);max-width:calc(100% - 16px);box-shadow:var(--shadow-card);border-radius:10px;align-items:center;gap:4px;padding:4px 6px;font-size:12px;display:flex;position:absolute;top:8px}.scope-crumb{color:var(--primary-strong);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:0;border-radius:6px;max-width:220px;padding:2px 8px;font-weight:700;overflow:hidden}.scope-crumb:hover{background:var(--bg-paper)}.scope-crumb.current{color:var(--text);cursor:default}.scope-sep{color:var(--text-muted)}.tab-list{z-index:40;flex-direction:column;gap:2px;width:280px;max-height:60vh;padding:6px;display:flex;position:absolute;bottom:calc(100% + 6px);left:12px;overflow:auto}.tab-list-row{color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;width:100%;padding:6px 8px;font-size:12px;display:flex}.tab-list-row:hover{background:var(--bg-paper)}.tab-list-row[data-on=true]{background:var(--primary-soft);font-weight:700}.tab-list-icon{text-align:center;width:18px;color:var(--text-muted)}.tab-list-prog{color:var(--text-muted);margin-left:auto;font-size:11px}.canvas-tab:hover{color:var(--text)}.canvas-tab[data-marked=true]:before{content:"";background:var(--accent);border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.resize-handle{cursor:col-resize;z-index:25;width:10px;position:absolute;top:0;bottom:0}.resize-handle:after{content:"";background:0 0;width:2px;position:absolute;top:0;bottom:0;left:4px}.resize-handle:hover:after,.resize-handle[data-active=true]:after{background:var(--primary)}.resize-handle.left{left:-5px}.resize-handle.right{right:-5px}.canvas-wrap>.resize-handle{z-index:20}.panel.right{position:relative}.bg-block__tpl{opacity:.7;vertical-align:middle;border:1px solid;border-radius:4px;margin-left:6px;padding:0 4px;font-size:9px;display:inline-block}.meta-chip{opacity:.85;white-space:nowrap;border:1.5px solid;border-radius:999px;flex:none;padding:3px 7px;font-size:10px;line-height:1}.meta-chip.muted{opacity:.55;border-style:dashed}.meta-chip.status-white{background:var(--primary);color:var(--on-primary);border-color:var(--primary);opacity:1}.meta-chip.status-gray{border-color:var(--primary);color:var(--primary-strong);background:#0d808014}.meta-chip.status-black{border-style:dashed}.meta-chip.activity{background:var(--primary);color:var(--on-primary);border-color:var(--primary);opacity:1;font-weight:700}.meta-chip.activity.needs_decision{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.meta-chip.activity.blocked,.meta-chip.activity.waiting_review{background:var(--line-soft);color:var(--text);border-color:var(--line-soft)}.meta-chip.issue{color:var(--text);background:var(--bg-card);border-style:solid;text-decoration:none}.meta-chip.issue:hover{border-color:var(--primary);color:var(--primary-strong)}.meta-chip.ready{border-color:var(--primary);color:var(--primary-strong);opacity:1;font-weight:700}.meta-chip.overdue{background:var(--danger);color:#fbfbfb;border-color:var(--danger);opacity:1}.bg-block.mine{box-shadow:inset 5px 0 0 var(--primary)}.bg-block.mine.status-white{box-shadow:inset 3px 0 0 var(--primary)}.avatar.avatar-none{color:inherit;opacity:.55;text-shadow:none;background:0 0;border:2px dashed}.bg-block__port.ready{color:var(--primary-strong);opacity:1;font-weight:700}.bg-block__activity{background:var(--primary);color:var(--on-primary);border-radius:999px;flex:none;align-items:center;gap:4px;padding:2px 6px 2px 2px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.bg-block__activity.needs_decision{background:var(--accent);color:var(--on-accent)}.bg-block__activity.blocked,.bg-block__activity.waiting_review{background:var(--line-soft);color:var(--text)}.bg-block__actor{min-width:18px;height:18px;color:var(--ink-strong);background:#ffffffd9;border-radius:999px;justify-content:center;align-items:center;padding:0 3px;font-size:10px;font-weight:800;display:inline-flex}:root[data-theme=dark] .bg-block__actor{color:#e8eaed;background:#00000073}.bg-block.activity-working,.bg-block.activity-working.selected{animation:none}.bg-block.activity-needs_decision{border-style:solid}.react-flow__handle{border:2px solid var(--line);background:var(--bg-card);border-radius:999px;width:12px;height:12px}.react-flow__handle:before{content:"";border-radius:999px;position:absolute;inset:-9px}.react-flow__handle:hover{transform:translate(-50%,-50%)scale(1.35)}.react-flow__handle-right:hover{transform:translate(50%,-50%)scale(1.35)}.react-flow__handle.port-out{background:var(--primary);border-color:var(--primary-strong)}.react-flow__handle.port-inner{opacity:0;width:12px;height:12px}.react-flow__handle.port-promoted{border-style:dashed}.react-flow__handle-left{left:-7px}.react-flow__handle-right{right:-7px}.bg-terminal{border:3px solid var(--line);background:var(--primary-soft);width:200px;color:var(--text);box-shadow:var(--shadow-card);box-sizing:border-box;border-radius:14px;position:relative}.bg-terminal.selected{box-shadow:0 0 0 3px var(--primary), var(--shadow-card)}.bg-terminal__head{height:44px;font-family:var(--font-head);border-bottom:2px solid var(--line-soft);justify-content:space-between;align-items:center;padding:0 12px;font-weight:800;display:flex}.bg-terminal__row{white-space:nowrap;text-overflow:ellipsis;height:26px;padding:0 14px;font-size:12px;line-height:26px;position:relative;overflow:hidden}.bg-terminal__row.promoted{opacity:.75;font-style:italic}.bg-terminal__empty{color:var(--text-muted);padding:8px 14px 10px;font-size:12px}.tl-row{border-top:1px solid var(--line-soft);grid-template-columns:76px 24px 1fr;align-items:start;gap:6px;padding:4px 0;font-size:12px;display:grid}.tl-row:first-child{border-top:0}.tl-time{color:var(--text-muted);white-space:nowrap}.tl-actor{background:var(--primary-soft-2);border-radius:999px;justify-content:center;align-items:center;width:22px;height:18px;font-size:10px;font-weight:800;display:inline-flex}.decision-card{border:2px solid var(--accent);background:var(--bg-card);border-radius:10px;padding:8px}.summary-chip{border:2px solid var(--line-soft);background:var(--bg-card);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.summary-chip[data-on=true]{border-color:var(--primary);background:var(--primary-soft)}.summary-chip,.save-chip{white-space:nowrap;flex:none}.save-chip{border:2px solid var(--line-soft);color:var(--text-muted);border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.save-chip.unsaved{border-color:var(--accent);color:var(--text)}.save-chip__file{color:var(--text);text-overflow:ellipsis;max-width:160px;font-weight:700;overflow:hidden}@media (width<=900px){.summary-chip__txt,.save-chip__file{display:none}.search-box{width:120px}}.app-top header{min-width:0}.summary-chip .dot{background:var(--primary);border-radius:999px;width:8px;height:8px;animation:1.6s ease-in-out infinite pulse-dot}.summary-chip .dot.decision{background:var(--accent);animation:none}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}.react-flow{background:var(--bg-paper)}.react-flow__edge{--xy-edge-stroke-selected:var(--wire)}.react-flow__edge.edge-ready{--xy-edge-stroke-selected:var(--wire-ready)}.react-flow__edge-path{stroke:var(--wire);stroke-width:2px;opacity:1;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-dasharray:6 5}.react-flow__edge.edge-ready .react-flow__edge-path{stroke:var(--wire-ready);stroke-width:4px;stroke-dasharray:none}.react-flow__edge-arrow{fill:var(--wire);stroke:none;pointer-events:none}.react-flow__edge.edge-ready .react-flow__edge-arrow{fill:var(--wire-ready)}.react-flow__edge.edge-dim .react-flow__edge-arrow{opacity:.45}.react-flow__edge-halo{fill:none;stroke:currentColor;stroke-opacity:.22;stroke-width:12px;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;color:var(--wire-halo)}.react-flow__edge.edge-hot .react-flow__edge-path{stroke-width:3px}.react-flow__edge.edge-hot.edge-ready .react-flow__edge-path,.react-flow__edge:hover .react-flow__edge-path{stroke-width:5px}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.edge-net .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path{stroke-width:6px;stroke-dasharray:14 10;animation:.8s linear infinite edge-flow;stroke:var(--accent)!important;opacity:1!important}.react-flow__edge.selected .react-flow__edge-halo,.react-flow__edge.edge-net .react-flow__edge-halo{color:var(--accent);stroke-opacity:.25;stroke-width:10px}.react-flow__edge.selected .react-flow__edge-arrow,.react-flow__edge.edge-net .react-flow__edge-arrow,.react-flow__edge.selected .react-flow__edge-junction,.react-flow__edge.edge-net .react-flow__edge-junction{fill:var(--accent)!important}.react-flow__edge.selected,.react-flow__edge.edge-net{z-index:1000!important}@keyframes edge-flow{to{stroke-dashoffset:-24px}}@media (prefers-reduced-motion:reduce){.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.edge-net .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path{animation:none}}.react-flow__edge.edge-dim .react-flow__edge-path{opacity:.45}.react-flow__edge.edge-dim .react-flow__edge-halo{display:none}.react-flow__connection-path{stroke:var(--primary);stroke-width:2px}.react-flow__controls{box-shadow:none;border:2px solid var(--line);border-radius:10px;overflow:hidden}.react-flow__controls-button{background:var(--bg-card);border-bottom:1px solid var(--line-soft);fill:var(--text)}.react-flow__controls-button:hover{background:var(--primary-soft)}.react-flow__controls-button svg{fill:var(--text)}.react-flow__minimap{border:2px solid var(--line);background:var(--bg-card);border-radius:10px}.react-flow__attribution{color:var(--text-muted);background:0 0;font-size:10px}.react-flow__node.selected .bg-terminal,.react-flow__node:focus{outline:none}.app-grid{grid-template-rows:auto minmax(0,1fr) 36px;grid-template-columns:1fr var(--right-w,320px);height:100%;display:grid}.app-grid.no-right{grid-template-columns:1fr 0}.app-grid.embed{grid-template-rows:0 1fr 36px;grid-template-columns:1fr 0}.panel{background:var(--bg-card);border-right:2px solid var(--line);min-width:0;overflow:auto}.panel.right{border-right:0;border-left:2px solid var(--line)}.panel.hidden-panel{display:none}.app-grid>.app-top{z-index:30;grid-area:1/1/auto/-1;position:relative}.app-grid>.app-main{grid-area:2/1}.app-grid>.panel.right{grid-area:2/2}.app-grid>.app-footer{white-space:nowrap;grid-area:3/1/auto/-1;overflow:hidden}@media (width<=900px){.app-grid,.app-grid.no-right{grid-template-columns:1fr 0}.panel.right{width:min(var(--right-w,320px), 92vw);z-index:20;position:fixed;top:60px;bottom:36px;right:0;box-shadow:-8px 0 24px #00000040}}.drawer{z-index:15;width:280px;box-shadow:var(--shadow-card);padding:12px;position:absolute;top:8px;bottom:112px;left:8px;overflow:auto}@media (width<=900px){.drawer{max-width:90vw}}.app-main{flex-direction:column;display:flex}.canvas-wrap{flex:1;min-width:0;min-height:0;position:relative}.seg{border:2px solid var(--line-soft);border-radius:10px;grid-template-columns:1fr 1fr 1fr;gap:0;display:grid;overflow:hidden}.seg__btn{background:var(--bg-card);border:0;border-right:2px solid var(--line-soft);cursor:pointer;color:var(--text-muted);flex-direction:column;align-items:center;gap:2px;padding:6px 2px;font-size:11px;display:flex}.seg__btn:last-child{border-right:0}.seg__btn[data-on=true]{background:var(--primary-soft);color:var(--text)}.seg__btn:disabled{cursor:default}.seg__btn .tree-glyph{border-radius:6px;width:24px;height:24px;font-size:13px;line-height:20px}.avatar-btn{cursor:pointer;opacity:.35;border-color:#0000}.avatar-btn[data-on=true]{opacity:1;border-color:var(--line)}.avatar-btn:disabled{cursor:default}.sec{border-top:2px solid var(--line-soft);flex-direction:column;gap:8px;padding-top:12px;display:flex}.sec:first-of-type{border-top:0;padding-top:0}.sec>.sec__head{justify-content:space-between;align-items:center;min-height:22px;display:flex}.sec>.sec__head .label{color:var(--text);letter-spacing:.1em;font-weight:800}.search-box{background:var(--bg-paper);border-radius:999px;width:200px;padding:4px 10px}.search-box:focus{background:var(--bg-card)}.mode-toggle{border:2px solid var(--line);background:var(--bg-card);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:3px 10px 3px 4px;font-size:12px;font-weight:800;display:inline-flex}.mode-toggle__knob{background:var(--line-soft);border-radius:999px;width:16px;height:16px;transition:background .15s}.mode-toggle[data-on=true]{background:var(--primary-soft);border-color:var(--primary);color:var(--primary-strong)}.mode-toggle[data-on=true] .mode-toggle__knob{background:var(--primary)}.mode-toggle__label{display:inline-grid}.mode-toggle__label>span{grid-area:1/1}.mode-toggle__label>span[data-active=false]{visibility:hidden}.bg-block.drop-target{box-shadow:0 0 0 4px var(--accent)}.input-plain{background:0 0;border-color:#0000;padding:4px 6px}.date-field{flex:1;align-items:center;gap:2px;min-width:0;display:inline-flex}.date-field input[type=date]{cursor:pointer;flex:1;min-width:0}.date-field input[type=date]::-webkit-calendar-picker-indicator{display:none}.date-field__btn{border:2px solid var(--line-soft);background:var(--bg-card);width:26px;height:26px;color:var(--text);cursor:pointer;border-radius:7px;flex:none;justify-content:center;align-items:center;display:inline-flex}.date-field__btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.date-field__btn:disabled{opacity:.4;cursor:default}.input-plain:hover:not(:disabled){border-color:var(--line-soft)}.input-plain:focus{border-color:var(--primary);background:var(--bg-card)}.port-card{border:2px solid var(--line-soft);background:var(--bg-paper);border-radius:10px;margin-top:8px;padding:4px 6px}.port-card .input-plain{background:0 0}.io-mark{background:var(--primary-soft-2);width:18px;height:18px;color:var(--primary-strong);border-radius:5px;justify-content:center;align-items:center;margin-right:6px;font-size:12px;font-weight:800;display:inline-flex}.io-mark.out{background:var(--primary);color:var(--on-primary)}.help-table td{vertical-align:top;padding:3px 6px;font-size:13px}.help-table td:first-child{color:var(--text-muted);white-space:nowrap}.btn-ghost[data-on=true]{background:var(--primary-soft)}.toast{background:var(--ink-strong);color:var(--bg-paper);border:2px solid var(--line);z-index:50;border-radius:10px;max-width:90vw;padding:8px 16px;position:fixed;bottom:52px;left:50%;transform:translate(-50%)}:root[data-theme=dark] .toast{background:var(--primary-soft-2);color:var(--text)}.tree-row{cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:3px 8px;display:flex;overflow:hidden}.tree-row:hover{background:var(--primary-soft)}.tree-row[data-selected=true]{background:var(--primary-soft-2)}.tree-glyph{border:2px solid var(--line);text-align:center;border-radius:4px;flex:none;width:16px;height:16px;font-size:10px;font-weight:800;line-height:12px}.tree-glyph.black{background:var(--box-black-bg);color:var(--box-black-text);border-style:dashed}.tree-glyph.gray{background:var(--box-gray-bg);background-image:repeating-linear-gradient(135deg, transparent 0 3px, var(--box-gray-hatch) 3px 4px)}.tree-glyph.white{background:var(--box-white-bg);color:var(--box-white-text)}.status-btn{border:2px solid var(--line-soft);background:var(--bg-card);cursor:pointer;border-radius:10px;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;font-size:11px;display:flex}.status-btn[data-on=true]{border-color:var(--primary);background:var(--primary-soft)}.status-btn .tree-glyph{border-radius:7px;width:28px;height:28px;font-size:15px;line-height:24px}.progress-bar{background:var(--line-soft);border:1.5px solid var(--line);border-radius:999px;height:10px;overflow:hidden}.progress-bar>span{background:var(--primary);height:100%;transition:width .4s;display:block}.kbd{border:1px solid var(--line-soft);background:var(--bg-paper);border-bottom-width:2px;border-radius:4px;padding:1px 5px;font-size:11px}.modal-backdrop{z-index:40;background:#1a1d218c;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{width:min(720px,100%);max-height:90vh;box-shadow:var(--shadow-card);overflow:auto}input[type=range],input[type=checkbox]{accent-color:var(--primary)}.react-flow__edge-path{pointer-events:none}.bg-block.selected,.bg-terminal.selected,.react-flow__node.selected .bg-terminal{box-shadow:0 0 0 2px var(--selection), 0 0 0 6px var(--selection-soft)!important}.bg-block.mine.selected{box-shadow:inset 3px 0 0 var(--primary), 0 0 0 2px var(--selection), 0 0 0 6px var(--selection-soft)!important}.bg-block.kind-project.selected{box-shadow:0 0 0 2px var(--selection), 0 0 0 6px var(--selection-soft)!important}.home-dialog{flex-direction:column;gap:24px;width:min(640px,100vw - 32px);padding:24px;display:flex}.home-section{border:1px solid var(--line-soft);border-radius:8px;flex-direction:column;gap:8px;padding:16px;display:flex}.home-section--shared{border:2px solid var(--primary);background:var(--primary-soft)}.home-description{color:var(--text-muted);font-size:13px;line-height:1.6}.home-server{flex-direction:column;gap:8px;margin-top:8px;display:flex}.home-command{border:1px solid var(--line-soft);background:var(--bg-card);border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;padding:8px;display:flex}.home-command code{overflow-wrap:anywhere;flex:1;font-size:13px}.home-create{gap:8px;margin-top:8px;display:flex}.home-create input{flex:1;min-width:0}.home-projects{max-height:200px;overflow:auto}.home-project-open{text-align:left;cursor:pointer;flex-direction:column;flex:1;align-items:flex-start;min-width:0;padding:8px;display:flex}.home-project-open .truncate{max-width:100%}.home-dialog button:focus-visible,.home-dialog a:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.save-notice{background:var(--bg-card);color:var(--text);border-bottom:2px solid var(--line);max-height:192px;padding:8px 16px;font-size:13px;overflow:auto}.save-notice pre{white-space:pre-wrap;overflow-wrap:anywhere}.app-top>header{height:60px;min-height:60px}.app-top>header.topbar{border-bottom:2px solid var(--line);background:var(--bg-card);flex-wrap:wrap;gap:8px 16px;height:auto;min-height:64px;padding:8px 16px;display:flex}.topbar-identity,.topbar-tools{align-items:center;gap:8px;min-width:0;display:flex}.topbar-tools{flex-wrap:wrap;flex:auto;justify-content:flex-end}.topbar-tools>button,.topbar-tools>.relative:not(.topbar-search){flex-shrink:0}.project-name{text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;flex:1;min-width:40px;max-width:240px;font-weight:700;overflow:hidden}.topbar-search{flex:1;min-width:96px;max-width:240px}.topbar-search .search-box{width:100%}.topbar .summary-chip{white-space:normal;flex-wrap:wrap;gap:4px 8px;min-height:32px}.topbar .summary-chip__txt{display:inline}.attention-section{border:1px solid var(--accent);background:var(--bg-paper);border-radius:8px;flex-direction:column;gap:16px;padding:16px 8px;display:flex}.attention-section .label{color:var(--text)}.inspector-attention{white-space:normal;text-align:left;border-color:var(--accent);justify-content:flex-start;line-height:1.5}.category-field{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:16px;margin-top:8px;display:grid}.panel.right .input{min-width:0}.panel.right{overflow-wrap:anywhere}.topbar button:focus-visible,.panel button:focus-visible{outline:2px solid var(--primary-strong);outline-offset:2px}@media (width<=1100px){.topbar-tools{flex-basis:100%}.topbar-search{max-width:none}}@media (width<=900px){.app-grid>.panel.right{width:min(var(--right-w,320px), 92vw);z-index:20;grid-area:2/1;justify-self:end;position:relative;top:auto;bottom:auto;right:auto}}@media (width<=600px){.app-top>header.topbar{padding:8px}.topbar-identity,.topbar-tools{gap:8px}.topbar-identity{flex-wrap:wrap}.topbar .summary-chip{flex-basis:100%;order:2;justify-content:center}.topbar .save-chip{white-space:normal;max-width:144px;font-size:11px}.topbar .save-chip__file{display:none}.app-grid>.panel.right{border-left:0;width:100%}.panel.right>.resize-handle,.app-footer .progress-bar{display:none}.app-footer{gap:8px;padding-inline:8px}.scope-path{flex-wrap:wrap;max-width:calc(100% - 16px)}}.resume-section,.resume-card{flex-direction:column;gap:8px;display:flex}.resume-section{gap:16px;font-size:13px}.resume-card{border:1px solid var(--line-soft);background:var(--bg-paper);border-radius:8px;padding:8px}.conflict-dialog{border:2px solid var(--line);background:var(--bg-card);width:min(800px,100vw - 32px);max-height:calc(100dvh - 32px);color:var(--text);border-radius:16px;margin:auto;padding:0}.conflict-dialog[open]{flex-direction:column;display:flex}.conflict-dialog::backdrop{background:#0009}.conflict-dialog__head,.conflict-dialog__foot{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;padding:16px;display:flex}.conflict-dialog__head h2,.conflict-dialog__foot>span{flex:1}.conflict-dialog__body{flex-direction:column;gap:16px;min-height:0;padding:0 16px;display:flex;overflow:auto}.conflict-item{border:1px solid var(--line-soft);border-radius:8px;min-width:0;padding:8px}.conflict-item legend{overflow-wrap:anywhere;font-size:13px;font-weight:700}.conflict-columns{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.conflict-choice{border:2px solid var(--line-soft);cursor:pointer;border-radius:8px;min-width:0;padding:8px}.conflict-choice[data-selected=true]{border-color:var(--primary);background:var(--primary-soft)}.conflict-choice pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:240px;margin-top:8px;font-size:12px;overflow:auto}.version-info{margin-left:auto;font-size:11px}.version-info summary{cursor:pointer}.version-info__content{z-index:40;white-space:normal;width:min(352px,100vw - 16px);max-height:60dvh;padding:16px;position:fixed;bottom:40px;right:8px;overflow:auto}.version-info dl{grid-template-columns:auto minmax(0,1fr);gap:8px 16px;margin-block:16px;display:grid}.version-info dd{overflow-wrap:anywhere}@media (width<=600px){.conflict-columns{grid-template-columns:1fr}.build-stamp{display:none}}.bg-block__title{font-size:15px}.bg-block__cat{font-size:11px}.bg-block__port{font-size:12px}.bg-block.status-white:not(.expanded) .bg-block__port.ready{color:var(--primary-strong)}.bg-block.status-white:not(.expanded) .status-icon.done circle{fill:var(--primary-strong)}.react-flow__handle.connectingto.valid{outline:4px solid var(--wire-ready);outline-offset:3px}.react-flow__handle.connectionindicator{cursor:crosshair}.react-flow__handle.clickconnecting{outline:3px solid var(--accent);outline-offset:3px}.canvas-tools{border:1px solid var(--line-soft);background:var(--bg-card);max-width:calc(100% - 32px);color:var(--text);box-shadow:var(--shadow-card);border-radius:12px;padding:8px}.canvas-tools__legend{flex-wrap:wrap;gap:16px;padding:0 4px 8px;font-size:11px;display:flex}.canvas-tools__legend span{align-items:center;gap:6px;display:inline-flex}.canvas-tools__legend i{border-top:2px dashed var(--wire);width:20px}.canvas-tools__legend i.ready{border-top:4px solid var(--wire-ready)}.canvas-tools__legend i.selected{border-top:4px dashed var(--accent)}.canvas-tools__buttons{flex-wrap:wrap;gap:4px;display:flex}.canvas-tools__buttons button{border:1px solid var(--line-soft);background:var(--bg-card);min-width:32px;min-height:32px;color:var(--text);cursor:pointer;border-radius:6px;padding:4px 8px;font-size:12px}.canvas-tools__buttons button:hover,.canvas-tools__buttons button[aria-pressed=true]{background:var(--primary-soft);border-color:var(--primary)}.canvas-tools__buttons button:disabled{opacity:.45;cursor:default}.canvas-tools button:focus-visible,.canvas-tools summary:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.canvas-tools__help{max-width:380px;padding:8px 4px 0;font-size:11px}.canvas-tools__help summary{cursor:pointer}.canvas-tools__help p{margin:8px 0 0;line-height:1.6}.canvas-connect-hint{border:1px solid var(--primary);background:var(--bg-card);max-width:calc(100% - 32px);color:var(--text);box-shadow:var(--shadow-card);border-radius:8px;align-items:center;gap:8px;padding:8px 16px;font-size:12px;display:flex}@media (width<=900px){.react-flow__minimap{width:144px;height:96px;top:48px;bottom:auto}.react-flow__minimap svg{width:100%;height:100%}}@media (prefers-reduced-motion:reduce){.react-flow__edge.edge-net .react-flow__edge-path{animation:none}}.btn{border-width:1px;border-radius:8px;transition:background .15s,border-color .15s}.btn:hover{box-shadow:none;border-color:var(--primary);transform:none}.card{border-width:1px;border-color:var(--line-soft)}.app-top>header.topbar{border-bottom:1px solid var(--line-soft);min-height:64px}.topbar-identity{flex:360px}.topbar-tools{flex:0 auto}.topbar-search{flex:0 200px}.menu-actions{flex-direction:column;gap:4px;display:none}.save-chip{background:var(--bg-paper);border:none}.scope-path{border:1px solid var(--line-soft);box-shadow:none}.react-flow__edge-junction{fill:var(--wire);pointer-events:none}.react-flow__edge.edge-ready .react-flow__edge-junction{fill:var(--wire-ready)}.canvas-tools{border-radius:10px;padding:4px}.canvas-tools__buttons{align-items:center}.canvas-tools__buttons>button{border-color:#0000}.canvas-tools__settings{position:static}.canvas-tools__settings>summary{cursor:pointer;border-left:1px solid var(--line-soft);padding:6px 8px;font-size:12px;list-style:none}.canvas-tools__settings>summary:after{content:" ↑";opacity:.65}.canvas-tools__settings[open]>summary{background:var(--primary-soft);border-radius:6px}.canvas-tools__popover{border:1px solid var(--line-soft);background:var(--bg-card);width:min(352px,100vw - 48px);box-shadow:var(--shadow-card);border-radius:12px;padding:16px;font-size:12px;position:absolute;bottom:calc(100% + 8px);left:0}.canvas-tools__popover p{color:var(--text-muted);margin-top:12px;line-height:1.7}.canvas-tools__legend{gap:8px 16px;padding:0 0 12px}.home-dialog{width:min(640px,100vw - 32px)}.home-welcome{padding:24px 0 16px}.home-welcome h2{letter-spacing:-.03em;font-size:clamp(22px,4vw,30px);line-height:1.4}.home-welcome p{max-width:460px;color:var(--text-muted);margin:12px 0 24px}.home-welcome>.btn{padding:12px 24px;font-weight:700}.home-disclosure{border-top:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);padding:16px 0}.home-disclosure>summary{cursor:pointer;color:var(--primary-strong);font-weight:600}.home-disclosure .home-section{margin-top:16px}@media (width<=760px){.topbar .desktop-action{display:none}.menu-actions{display:flex}}@media (prefers-reduced-motion:reduce){.btn,.bg-block{transition:none}}.modal-backdrop:has(.home-dialog){background:radial-gradient(ellipse at top, var(--primary-soft), var(--bg-paper) 70%)}@keyframes spin{to{transform:rotate(360deg)}}.spin{transform-origin:50%;animation:.8s linear infinite spin}@media (prefers-reduced-motion:reduce){.spin{animation:none}}.home-vscode p{overflow-wrap:anywhere}.home-vscode__note{border:2px solid var(--line-soft);white-space:pre-wrap;overflow-wrap:anywhere;text-align:left;border-radius:8px;padding:8px 12px;font-size:13px}.bg-block{border-color:var(--line-soft);border-radius:8px}.bg-block.status-black{border-style:solid}.bg-block.has-cat:before{display:none}.bg-block.status-gray:not(.expanded){border-color:var(--box-gray-border)}.bg-block.status-gray:not(.expanded) .bg-block__progress{background:var(--box-gray-track)}.bg-block__title{font-family:var(--font-body);font-weight:600}.bg-block__meta{gap:6px;overflow:hidden}.bg-block__meta>.status-icon{width:14px;height:14px}.bg-block__meta>.meta-chip{opacity:1;background:0 0;border:0;padding:2px 4px;font-size:11px}.bg-block__meta>.meta-chip.status-white{color:inherit}.bg-block__meta>.meta-chip.activity{color:var(--primary-strong);font-weight:500}.bg-block__meta>.meta-chip.activity.blocked{color:var(--danger)}.bg-block__meta>.meta-chip.activity.waiting_review{color:inherit}.bg-block__meta>.meta-chip.needs_decision{background:var(--attention-bg);color:var(--attention-text);border-radius:4px;font-weight:600}.bg-block.status-black:not(.expanded) .meta-chip.activity:not(.blocked),.bg-block.status-black:not(.expanded) .meta-chip.ready{color:#8fe0e0}.bg-block__meta>.meta-chip.overdue{background:var(--danger);color:#fbfbfb}.bg-block__meta>.bg-block__cat{color:inherit;opacity:.8;background:0 0;border:0;margin-left:auto;padding:2px 4px;font-weight:400}.bg-block__secondary{display:none}.bg-block.selected .bg-block__secondary{display:inline-flex}.bg-block__progress{height:3px;box-shadow:none;background:currentColor;bottom:6px}@supports (color:color-mix(in lab, red, red)){.bg-block__progress{background:color-mix(in srgb, currentColor 12%, transparent)}}.bg-block__progress>span{background:var(--primary)}.bg-block.is-overview:not(.selected) .bg-block__progress,.bg-block.is-overview:not(.selected) .bg-block__actor-name,.bg-block.is-overview:not(.selected) .meta-chip.issue,.bg-block.is-overview:not(.selected) .meta-chip.muted{display:none}.bg-block.is-overview:not(.selected) .bg-block__meta>.meta-chip{font-size:13px}.bg-block.is-overview:not(.selected) .bg-block__meta>.status-icon{width:16px;height:16px}.summary-chip .summary-decision{background:var(--attention-bg);color:var(--attention-text);border-radius:6px;padding:4px 8px}.wire-state{align-items:center;gap:8px;font-size:13px;display:flex}.wire-state:before{content:"";border-top:2px dashed var(--wire);width:28px}.wire-state[data-ready=true]:before{border-top:4px solid var(--wire-ready)}.wire-reason{color:var(--text-muted);padding:8px 0;font-size:12px}@media (prefers-reduced-motion:reduce){.bg-block.just-glowed{animation:none}}.sync-chip-wrap{flex:none;position:relative}.sync-chip{border:2px solid var(--line-soft);color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.sync-chip__dot{background:var(--line-soft);border-radius:50%;width:8px;height:8px}.sync-chip.tone-ok{color:var(--text)}.sync-chip.tone-ok .sync-chip__dot{background:#2e9e6b}.sync-chip.tone-busy{color:var(--text)}.sync-chip.tone-busy .sync-chip__dot{background:var(--primary)}.sync-chip.tone-attention{color:var(--text);border-color:var(--accent)}.sync-chip.tone-attention .sync-chip__dot{background:var(--accent)}.sync-chip.tone-problem{color:var(--text);border-color:#c9473d}.sync-chip.tone-problem .sync-chip__dot{background:#c9473d}.sync-chip.tone-quiet .sync-chip__dot{background:var(--line-soft)}.sync-panel{z-index:30;border:1px solid var(--line-soft);background:var(--bg-card);width:min(360px,100vw - 32px);color:var(--text);border-radius:12px;flex-direction:column;gap:8px;padding:12px 14px;font-size:13px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 24px #0000002e}.sync-panel__row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.sync-panel__who{font-weight:600}.sync-panel__toggle{align-items:center;gap:6px;display:inline-flex}.sync-panel__line{line-height:1.5}.sync-panel__problem{color:#c9473d}.sync-panel__halt{border-top:1px solid var(--line-soft);flex-direction:column;gap:6px;padding-top:8px;display:flex}.sync-panel__choices{flex-wrap:wrap;gap:6px;display:flex}.sync-panel__details{color:var(--text-muted);white-space:pre-wrap;word-break:break-all;font-size:12px}.sync-panel__id{font-family:var(--font-mono,monospace);font-size:11px}.sync-panel__signin{flex-direction:column;gap:4px;display:flex}.sync-panel__signin a{word-break:break-all}.sync-panel__code{font-family:var(--font-mono,monospace);letter-spacing:2px;font-size:20px}.sync-panel__close{position:absolute;top:6px;right:6px}.sync-panel .muted{color:var(--text-muted)}.restore-dialog{max-height:70vh;overflow:auto}.canvas-layout{flex:1;min-width:0;min-height:0;display:flex}.tree-toggle{justify-content:center;align-items:center;width:30px;height:28px;display:inline-flex;padding:4px!important}.tree-toggle[aria-pressed=true]{background:var(--primary-soft);color:var(--primary-strong)}.tree-toggle svg{width:18px;height:18px}.tree-panel{background:var(--bg-card);border-right:1px solid var(--line-soft);width:260px;min-height:0;color:var(--text);flex-direction:column;flex:0 0 260px;display:flex;position:relative}.tree-panel__head{flex:none;align-items:center;gap:6px;min-width:0;height:36px;padding:5px 8px 5px 12px;font-size:11px;display:flex}.tree-panel__head strong{font-weight:600}.tree-panel__tools{gap:2px;margin-left:auto;display:flex}.tree-tool{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:3px;flex:none;justify-content:center;align-items:center;padding:3px;display:inline-flex}.tree-tool:hover{background:var(--primary-soft);color:var(--text)}.tree-panel__list{scrollbar-width:none;flex:1;min-height:0;padding:0 0 8px;overflow:auto}.tree-panel__list::-webkit-scrollbar{display:none}.tree-panel .tree-row{border-radius:0;gap:5px;height:28px;min-height:28px;padding-top:0;padding-bottom:0;padding-right:4px;position:relative;overflow:visible}.tree-row[data-selected=true]{box-shadow:inset 2px 0 var(--primary-strong)}.tree-guides{pointer-events:none;background:repeating-linear-gradient(to right, var(--line-soft) 0 1px, transparent 1px 16px);position:absolute;top:0;bottom:0;left:14px}.tree-branch{width:20px;height:26px;color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:3px;flex:none;justify-content:center;align-items:center;padding:2px;display:inline-flex;position:relative}.tree-branch:hover:not(:disabled){background:var(--primary-soft);color:var(--text)}.tree-branch svg{width:12px;height:12px}.tree-branch[aria-expanded=true] svg{transform:rotate(90deg)}.tree-branch:disabled{visibility:hidden}.tree-kind{color:var(--cat);flex:none;align-items:center;display:inline-flex}:root[data-theme=dark] .tree-kind{color:var(--cat)}@supports (color:color-mix(in lab, red, red)){:root[data-theme=dark] .tree-kind{color:color-mix(in srgb, var(--cat) 65%, white)}}.tree-row__content{cursor:pointer;flex:1;min-width:0}.tree-row__title{text-overflow:ellipsis;font-size:13px;font-weight:400;line-height:26px;display:block;overflow:hidden}.tree-alert{color:var(--attention-text);background:var(--attention-bg);text-align:center;border-radius:3px;flex:none;min-width:14px;font-size:11px;font-weight:700}.tree-state{color:var(--text-muted);flex:none;display:inline-flex}.tree-state.gray{color:var(--primary-strong)}.tree-row__menu{opacity:0;width:18px}.tree-row:hover .tree-row__menu,.tree-row:focus-within .tree-row__menu,.tree-row[data-selected=true] .tree-row__menu,.tree-row__menu[aria-expanded=true]{opacity:1}.tree-title-input{width:100%;min-width:0;height:24px;padding:1px 4px;font-size:13px}.tree-actions{flex:none;max-height:65%;margin:6px;padding:4px 6px 8px;font-size:12px;overflow:auto}.tree-actions .tree-panel__head{height:auto;padding:4px 0}.tree-actions .tree-panel__head>button{margin-left:auto}.tree-actions__buttons{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px;display:grid}.tree-actions__move{gap:4px;margin-bottom:8px;display:flex}.tree-actions__move select{flex:1;min-width:0}.tree-panel button:focus-visible,.tree-row:focus-visible{outline:1px solid var(--primary-strong);outline-offset:-1px}@media (pointer:coarse){.tree-panel .tree-row{height:34px;min-height:34px}.tree-branch{width:24px;height:32px}.tree-row__menu{opacity:1;width:24px}}@media (width<=900px){.tree-panel{z-index:25;width:min(280px,100vw - 24px);box-shadow:var(--shadow-card);position:absolute;top:0;bottom:38px;left:0}}.sync-popover{z-index:80;width:min(400px,100vw - 16px);box-shadow:var(--shadow-card);border-radius:12px;position:fixed;overflow:auto}.sync-popover>.sync-panel{width:100%;box-shadow:none;overflow-wrap:anywhere;gap:12px;padding:18px 16px 14px;position:relative;inset:auto}.sync-panel__heading{align-items:center;gap:9px;padding-right:28px;font-size:16px;display:flex}.sync-panel__heading>span{background:var(--primary-soft);border-radius:7px;place-items:center;width:26px;height:26px;display:grid}.sync-panel__comparison{border-left:3px solid var(--line-soft);gap:6px;padding-left:10px;display:grid}.sync-popover .sync-panel__choices{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.sync-popover .btn{white-space:normal;overflow-wrap:anywhere;height:auto}.sync-popover details{border-top:1px solid var(--line-soft);white-space:normal;word-break:normal;padding-top:10px}.sync-popover summary{cursor:pointer;color:var(--text-muted)}.sync-popover details[open]{flex-direction:column;gap:10px;display:flex}.sync-popover details[open]>*{margin-top:8px}.sync-popover details[open]>summary{margin-top:0}.bg-block__head>.bg-block__cat{letter-spacing:0;flex:none;padding:3px 6px;font-size:11px;font-weight:600;display:inline-flex}.bg-block.is-overview:not(.selected) .bg-block__head>.bg-block__cat{display:inline-flex}.category-field{gap:10px;margin-top:-6px}.category-field>.input{padding:4px 8px;font-size:13px;line-height:1.4}.conflict-groups{gap:16px;min-width:0;display:grid}.conflict-groups__intro{opacity:.8;margin:0;font-size:12px}.conflict-group{border:1px solid var(--line-soft);border-radius:8px;min-width:0;margin:0;padding:16px}.conflict-group legend{overflow-wrap:anywhere;max-width:100%;padding:0 8px;font-weight:600}.conflict-group__warning{margin:0 0 8px;font-size:12px}.conflict-group__picks{grid-template-columns:1fr 1fr;gap:8px;display:grid}.conflict-group__picks label{border:1px solid var(--line-soft);cursor:pointer;border-radius:4px;align-items:center;gap:8px;padding:8px;font-size:12px;display:flex}.conflict-group__picks label[data-selected=true]{border-color:var(--primary);background:var(--primary)}@supports (color:color-mix(in lab, red, red)){.conflict-group__picks label[data-selected=true]{background:color-mix(in srgb, var(--primary) 10%, transparent)}}.conflict-field h4{margin:16px 0 8px;font-size:12px;font-weight:600}.conflict-groups pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;max-height:240px;overflow:auto}.conflict-group__tools{flex-wrap:wrap;align-items:baseline;gap:8px;margin-top:8px;display:flex}.conflict-group__tools details{min-width:0;font-size:11px}.conflict-group__tools summary{cursor:pointer;opacity:.7}.conflict-groups__submit{justify-content:space-between;align-items:center;gap:16px;font-size:12px;display:flex}@media (width<=480px){.conflict-groups .conflict-columns{grid-template-columns:1fr}.conflict-group{padding:8px}}.claim-mark{color:var(--text-muted);flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.claim-mark[data-expired=true]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.claim-details summary,.claim-settings summary{cursor:pointer}.bg-block .claim-mark{min-width:0;max-width:140px}.claim-mark>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.claim-details .claim-mark{align-self:flex-start}.bg-block .claim-mark{color:inherit;opacity:1}.sync-startup{flex-direction:column;gap:8px;padding:8px 0;display:flex}.sync-project-row{text-align:left;white-space:normal;overflow-wrap:anywhere;flex-direction:column;align-items:flex-start;gap:4px;width:100%;padding:8px;display:flex}.sync-project-row span{opacity:.75;font-size:11px}.sync-panel{max-height:calc(100dvh - 96px);overflow-y:auto}.sync-startup p{margin:0;line-height:1.5}.sync-startup .btn{white-space:normal;overflow-wrap:anywhere}.sync-startup fieldset{border:1px solid var(--line-soft);border-radius:8px;flex-direction:column;gap:8px;min-width:0;padding:8px;display:flex}.sync-startup fieldset label{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.sync-startup .input{min-width:0;max-width:100%}.sync-project-row{width:100%;min-width:0}.sync-project-row span{color:var(--text-muted);font-size:12px}.sync-lifecycle,.sync-lifecycle__body,.sync-lifecycle__confirm{flex-direction:column;gap:8px;min-width:0;display:flex}.sync-lifecycle p{overflow-wrap:anywhere;margin:0;line-height:1.5}.sync-lifecycle__confirm{border:1px solid var(--line-soft);border-radius:8px;padding:8px}.sync-startup .sync-panel__row>.sync-project-row{flex:1;width:auto;min-width:0}.sync-lifecycle__confirm .btn-danger{border-color:var(--danger);font-weight:600}.sync-panel__management{overflow-wrap:anywhere;font-size:12px}.sync-panel__management>summary{color:var(--text-muted);cursor:pointer;margin-bottom:8px}:root{--task-paper:#fff;--task-foot:#f1f5f5;--task-text:#24353b;--task-sub:#475f68;--task-border:#c8d5d8;--task-done:#37765e;--task-wait:#795517}:root[data-theme=dark]{--task-paper:#202a2e;--task-foot:#192225;--task-text:#e5eeee;--task-sub:#aec0c5;--task-border:#43565c;--task-done:#83c7a9;--task-wait:#d8b16f}.bg-block:not(.expanded){--task-paper:#fff;--task-foot:#f2f6f8;--task-text:#173449;--task-sub:#506577;--task-border:#b1c1cd;--task-done:#147d59;--task-wait:#805000;--task-head:#d5e0eb;--task-head-text:#203647;--task-head-sub:#425b70;--task-head-status:#425b70;--task-head-alert:#a51d38}.bg-block:not(.expanded).status-gray{--task-head:#25dcbf;--task-head-text:#073c35;--task-head-sub:#12534b;--task-head-status:#073c35;--task-border:#009b84;background-image:none}.bg-block:not(.expanded).status-white{--task-head:#f6fbfd;--task-head-text:#173449;--task-head-sub:#466579;--task-head-status:#176456;--task-border:#8fa9b9}:root[data-theme=dark] .bg-block:not(.expanded){--task-paper:#232b34;--task-foot:#1d252e;--task-text:#eef5fc;--task-sub:#becbd5;--task-border:#506071;--task-done:#83c7a9;--task-wait:#ffd079;--task-head:#303e4c;--task-head-text:#e8f0f9;--task-head-sub:#bdccda;--task-head-status:#bdccda;--task-head-alert:#ffb5be}:root[data-theme=dark] .bg-block:not(.expanded).status-gray{--task-paper:#203236;--task-foot:#1b2b2f;--task-head:#25dcbf;--task-head-text:#073c35;--task-head-sub:#12534b;--task-head-status:#073c35;--task-head-alert:#a51d38;--task-border:#20d9bd}:root[data-theme=dark] .bg-block:not(.expanded).status-white{--task-paper:#242d34;--task-foot:#1e272e;--task-head:#e4f0f5;--task-head-text:#173449;--task-head-sub:#466579;--task-head-status:#176456;--task-head-alert:#a51d38;--task-border:#829baa}.bg-block:not(.expanded){background:var(--task-paper);color:var(--task-text);border:1px solid var(--task-border);border-radius:8px;box-shadow:0 4px 12px #07162b18}.bg-block:not(.expanded)>.bg-block__head{background:var(--task-head);color:var(--task-head-text);box-sizing:border-box;border:0;border-radius:7px 7px 0 0;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:8px;padding:16px 16px 0;display:flex;position:relative}.bg-block:not(.expanded) .bg-block__title{overflow-wrap:anywhere;flex:none;width:100%;padding:0 24px 0 0;font-size:22px;font-weight:600;line-height:28px}.bg-block:not(.expanded) .bg-block__head>.bg-block__cat{background:var(--cat);border:0;border-radius:4px;align-items:center;gap:6px;height:24px;padding:4px 8px;font-size:14px;line-height:16px;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.bg-block:not(.expanded) .bg-block__head>.bg-block__cat{background:color-mix(in srgb, var(--cat) 14%, var(--task-head))}}.bg-block:not(.expanded) .bg-block__head>.bg-block__cat{color:var(--task-head-text);font-weight:500}.bg-block:not(.expanded) .bg-block__head:not(:has(.bg-block__cat)):not(:has(.bg-block__tag)){padding-top:48px}.bg-block:not(.expanded) .bg-block__toggle{color:var(--task-head-text);position:absolute;top:16px;right:8px}.bg-block:not(.expanded)>.bg-block__meta{background:var(--task-head);color:var(--task-head-sub);border:0;flex-wrap:wrap;align-content:flex-start;align-items:center;gap:4px;padding:0 16px 8px;display:flex;overflow:hidden}.bg-block:not(.expanded) .bg-block__meta>.meta-chip{padding:0 4px;font-size:14px;line-height:20px}.bg-block:not(.expanded) .bg-block__meta>.meta-chip.status-white,.bg-block:not(.expanded) .bg-block__meta>.meta-chip.status-gray,.bg-block:not(.expanded) .bg-block__meta>.meta-chip.status-black{color:var(--task-head-status)}.bg-block:not(.expanded) .status-icon.new circle{stroke:var(--task-head-status);stroke-dasharray:none}.bg-block:not(.expanded).status-white .status-icon.done circle{fill:var(--task-head-status)}.bg-block:not(.expanded) .status-icon.done path{stroke:var(--task-head)}.bg-block:not(.expanded) .status-icon.progress circle{stroke:var(--task-head-status)}.bg-block:not(.expanded) .status-icon.progress path{fill:var(--task-head-status)}.bg-block:not(.expanded) .meta-chip.activity:not(.blocked),.bg-block:not(.expanded) .meta-chip.ready{color:var(--task-head-sub)}.bg-block:not(.expanded) .bg-block__meta>.meta-chip.activity.blocked{color:var(--task-head-alert)}.bg-block:not(.expanded) .bg-block__ports{border-top:1px solid var(--task-border);visibility:visible;padding:0;display:block;position:absolute;left:0;right:0}.bg-block:not(.expanded) .bg-block__port{white-space:normal;opacity:1;color:var(--task-text);align-items:center;gap:8px;padding:8px 16px;font-size:16px;line-height:24px;display:flex;overflow:visible}.bg-block:not(.expanded) .bg-block__port.out{text-align:right;background:var(--task-foot);justify-content:flex-end}.bg-block__direction{color:var(--task-sub);flex:none;font-size:12px}.bg-block__port-name{overflow-wrap:anywhere;min-width:0}.bg-block__waiting{color:var(--task-wait);flex:none;margin-left:auto;font-size:14px}.bg-block:not(.expanded) .bg-block__port .opt{flex:none;font-size:9px}.bg-block:not(.expanded) .react-flow__handle.port-ready{background:var(--task-done);border-color:var(--task-done)}.bg-block:not(.expanded) .react-flow__handle.port-waiting{background:var(--task-paper);border-color:var(--task-wait)}.bg-block:not(.expanded) .bg-block__progress{display:none}.bg-block.expanded{outline:1px solid var(--task-border);outline-offset:-1px;box-shadow:none;border-color:#0000}.bg-block.expanded.kind-project>.bg-block__head,.bg-block.expanded.kind-project>.bg-block__meta{background:0 0;border-color:#0000}.bg-block.expanded .bg-block__head>.bg-block__cat{align-items:center;gap:4px;display:inline-flex}.bg-block.expanded .bg-block__progress{opacity:.5}.bg-block:not(.expanded) .bg-block__meta>.status-icon{margin-top:3px}.bg-block:not(.expanded) .bg-block__meta>.activity,.bg-block:not(.expanded) .bg-block__meta>.claim-mark{flex-basis:calc(100% - 8px);max-width:none}.bg-block:not(.expanded) .bg-block__meta>.needs_decision{margin-right:8px}.bg-block:not(.expanded).status-black .bg-block__port.ready,.bg-block:not(.expanded).status-white .bg-block__port.ready,.bg-block:not(.expanded) .bg-block__port.ready{color:var(--task-text)}.bg-block:not(.expanded).status-black .meta-chip.activity:not(.blocked),.bg-block:not(.expanded).status-black .meta-chip.ready{color:var(--task-head-sub)}.bg-block.expanded{background:var(--task-paper)}@supports (color:color-mix(in lab, red, red)){.bg-block.expanded{background:color-mix(in srgb, var(--task-paper) 35%, var(--bg-paper))}}.bg-block.expanded>.bg-block__head,.bg-block.expanded>.bg-block__meta{background:0 0}.bg-block__cat[data-category=design]{--cat:#777bb0}.bg-block:not(.expanded) .bg-block__cat[data-category=design]{--cat:#9364ee}.bg-block__cat[data-category=build]{--cat:#30826f}.bg-block:not(.expanded) .bg-block__cat[data-category=build]{--cat:#13aa7b}.bg-block__cat[data-category=verify]{--cat:#ac852e}.bg-block:not(.expanded) .bg-block__cat[data-category=verify]{--cat:#e7a322}.bg-block__cat[data-category=research]{--cat:#536c73}.bg-block:not(.expanded) .bg-block__cat[data-category=research]{--cat:#339ed6}.bg-stage{border-bottom:1px solid var(--task-border);height:28px;color:var(--text-muted);pointer-events:none;align-items:center;gap:8px;font-size:16px;display:flex;position:absolute}.bg-block.expanded>.bg-block__head .bg-block__title{font-size:20px;line-height:28px}.bg-block:not(.expanded) .bg-block__meta>.needs_decision{order:-1}.bg-block:not(.expanded) .bg-block__meta>.status-icon,.bg-block:not(.expanded) .bg-block__meta>.meta-chip[class*=status-]{order:-2}.vertical-card{position:relative}.bg-block.vertical-card:not(.expanded)>.bg-block__head{border-radius:0}.vertical-ports{box-sizing:border-box;color:var(--task-text,var(--text));background:var(--task-paper,var(--bg-card));gap:0;padding:8px 16px;display:flex;position:absolute;right:0}.vertical-ports.in{border-bottom:1px solid var(--task-border,var(--line));border-radius:7px 7px 0 0;top:0}.vertical-ports.out{border-top:1px solid var(--task-border,var(--line));background:var(--task-foot,var(--bg-card));border-radius:0 0 7px 7px;bottom:0}.vertical-port{text-align:center;flex-direction:column;flex:1;justify-content:center;gap:4px;min-width:0;padding:4px 8px;display:flex}.vertical-port+.vertical-port{border-left:1px solid var(--line-soft)}.vertical-port__direction{color:var(--task-sub,var(--text-muted));justify-content:center;gap:8px;font-size:11px;line-height:16px;display:flex}.vertical-port__waiting{color:var(--task-wait,var(--attention-text))}.vertical-port__name{overflow-wrap:anywhere;font-size:14px;line-height:20px}.bg-block.vertical-card.expanded>.bg-block__head{box-sizing:border-box;flex-direction:column;align-items:flex-start;gap:8px;width:320px;padding:16px;display:flex;position:relative}.bg-block.vertical-card.expanded>.bg-block__head .bg-block__title{width:100%;padding-right:24px;font-size:20px;line-height:28px}.bg-block.vertical-card.expanded>.bg-block__meta{box-sizing:border-box;width:320px;padding-left:16px}.bg-block.vertical-card.expanded .vertical-ports{background:0 0}.bg-block.vertical-card.expanded .vertical-ports.in{border-bottom:0}.vertical-terminal .bg-terminal__head{box-sizing:border-box;height:40px}.vertical-terminal__ports{padding:8px 16px;display:flex}.vertical-terminal .bg-terminal__row{white-space:normal;text-align:center;overflow-wrap:anywhere;flex:1;min-width:0;height:auto;padding:4px 8px;font-size:14px;line-height:20px}.flow-direction{border-left:1px solid var(--line);gap:2px;margin-left:4px;padding-left:8px;display:inline-flex}.flow-direction button{justify-content:center;align-items:center;width:32px;display:flex}.flow-direction svg{width:18px;height:18px}.canvas-tools__scroll-hint{color:var(--text-muted);padding:6px 8px 0;font-size:11px}.bg-block.vertical-card.expanded>.bg-block__head .bg-block__toggle{position:absolute;top:16px;right:8px}.canvas-tools__buttons>.canvas-tools__wrap,.canvas-tools__buttons>.canvas-tools__fit-all,.canvas-tools__buttons>.canvas-tools__fit-width{justify-content:center;align-items:center;width:32px;padding:0;display:inline-flex}.task-table-view{z-index:12;background:var(--bg-paper);flex-direction:column;gap:8px;padding:16px 16px 88px;display:flex;position:absolute;inset:0;overflow:hidden}.task-table-view__switch{position:absolute;bottom:15px;left:15px}.task-table-view__switch .flow-direction{border-left:0;margin-left:0;padding-left:0}.task-table-view__head{flex-wrap:wrap;align-items:center;gap:8px 16px;display:flex}.task-table-view__head h2{margin:0;font-size:16px;font-weight:800}.task-table-view__head select{width:auto;min-width:160px}.task-table-view__toggle{align-items:center;gap:8px;font-size:13px;display:inline-flex}.task-table-view__count{color:var(--text-muted);font-size:13px}.task-table-view__empty{color:var(--text-muted);font-size:14px}.task-table-view__scroll{border:1px solid var(--line-soft);background:var(--bg-card);border-radius:8px;flex:1;min-height:0;overflow:auto}.task-table{border-collapse:collapse;width:100%;font-size:13px}.task-table th{z-index:1;background:var(--bg-card);border-bottom:2px solid var(--line-soft);text-align:left;white-space:nowrap;position:sticky;top:0}.task-table th>button{width:100%;text-align:inherit;cursor:pointer;padding:8px;font-weight:700}.task-table td{border-bottom:1px solid var(--line-soft);vertical-align:top;padding:8px}.task-table th.num,.task-table td.num{text-align:right}.task-table tbody tr{cursor:pointer}.task-table tbody tr:hover,.task-table tbody tr:focus-visible{background:var(--primary-soft);outline:none}.task-table tbody tr[data-selected=true]{background:var(--primary-soft);box-shadow:inset 4px 0 0 var(--primary)}.task-table__title{min-width:160px;font-weight:700}.task-table__where{color:var(--text-muted);min-width:120px}.task-table__assignees{min-width:96px}.task-table__none{color:var(--text-muted)}.task-table__status{white-space:nowrap}.task-table__status.gray{color:var(--primary-strong);font-weight:700}.task-table__status.white{color:var(--text-muted)}.task-table td[data-overdue=true]{color:var(--attention-text);white-space:nowrap;font-weight:700}@media (width<=600px){.task-table-view{padding:8px 8px 80px}}.panel-close{flex:none;align-items:center;gap:4px;display:inline-flex}.panel-close__label{display:none}@media (width<=900px){.panel-close{border:2px solid var(--line);background:var(--bg-card);border-radius:999px;min-width:44px;min-height:44px;padding:0 16px;font-size:14px;font-weight:700}.panel-close>span:first-child{font-size:18px;line-height:1}.panel-close__label{display:inline}}@media (width<=600px){.inspector-body{gap:12px;padding-top:8px}}.bg-block__tag.branch{color:var(--primary-strong);background:0 0;border:1px solid}.bg-block.is-skipped{opacity:.45}.bg-block.is-skipped .bg-block__title{text-decoration:line-through}.meta-chip.skipped{border:1px dashed var(--line);color:var(--text-muted);background:0 0}.bg-block.branch-waiting{outline:2px dashed var(--line);outline-offset:2px}.meta-chip.branch-waiting{border:1px dashed var(--primary);color:var(--primary-strong);background:0 0}.meta-chip.unprepared{border:1px dashed var(--accent);color:var(--accent);background:0 0}button.meta-chip.unprepared{cursor:pointer;font:inherit}button.meta-chip.unprepared:hover{background:var(--accent)}@supports (color:color-mix(in lab, red, red)){button.meta-chip.unprepared:hover{background:color-mix(in srgb, var(--accent) 12%, transparent)}}.meta-chip.unprepared.below{opacity:.75}.bg-block__port.out.branch-chosen .bg-block__port-name{color:var(--primary-strong);font-weight:800}.bg-block__port.out.branch-rejected .bg-block__port-name{color:var(--text-muted);text-decoration:line-through}.bg-block__port .opt.merge{color:var(--primary-strong);font-weight:700}.react-flow__edge.edge-branch-rejected .react-flow__edge-path{opacity:.3;stroke-dasharray:2 6}.react-flow__edge.edge-branch-pending .react-flow__edge-path{stroke-dasharray:8 6}.branch-dialog{flex-direction:column;gap:16px;width:min(480px,100%);padding:24px;display:flex}.branch-dialog h2{margin:0;font-size:18px;font-weight:800}.branch-dialog__field{flex-direction:column;gap:8px;font-size:13px;font-weight:700;display:flex}.branch-dialog__field .input{font-weight:400}.edge-bar{border:2px solid var(--line);background:var(--bg-card);max-width:min(720px,100% - 32px);box-shadow:var(--shadow-card);border-radius:12px;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;font-size:13px;display:flex}.edge-bar__path{min-width:0}.edge-bar .wire-state{font-size:12px}.bg-block.kind-merge{box-shadow:none!important;background:0 0!important;border:0!important}.bg-block.kind-merge.selected .bg-merge path{stroke:var(--primary);stroke-width:3px}.bg-merge{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.bg-merge svg{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.bg-merge path{fill:var(--bg-card);stroke:var(--line);stroke-width:2px;vector-effect:non-scaling-stroke}.bg-merge.ready path{stroke:var(--wire-ready,#1c8a4e);stroke-width:2.5px}.bg-merge__label{color:var(--text-muted);flex-direction:column;align-items:center;padding-right:12px;font-size:11px;line-height:1.1;display:flex;position:relative}.bg-merge__label b{letter-spacing:.04em;color:var(--text);font-size:16px}.bg-merge.vertical svg{transform-origin:50%;width:var(--merge-h,96px);height:var(--merge-w,136px);top:calc(50% - 68px);left:calc(50% - 48px);transform:rotate(90deg)}.bg-merge.vertical .bg-merge__label{padding:0 0 12px}.bg-block.kind-branch:not(.expanded){box-shadow:none;filter:drop-shadow(0 4px 8px #07162b1f);background:0 0;border-color:#0000}.bg-block.kind-branch:not(.expanded)>.bg-block__head{clip-path:polygon(14px 0,calc(100% - 14px) 0,100% 14px,100% 100%,0 100%,0 14px);border-radius:0}.bg-block.kind-branch:not(.expanded) .bg-block__ports{background:var(--task-paper);clip-path:polygon(0 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,14px 100%,0 calc(100% - 14px));bottom:0}.bg-branch-outline{pointer-events:none;z-index:3;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.bg-branch-outline path{fill:none;stroke:var(--primary-strong);stroke-width:2px;vector-effect:non-scaling-stroke}.bg-block.kind-branch.selected .bg-branch-outline path{stroke:var(--primary);stroke-width:3px}.bg-block.kind-branch.selected:not(.expanded){box-shadow:none}.bg-branch-emblem{background:var(--primary-strong);width:28px;height:28px;box-shadow:0 0 0 3px var(--bg-card);z-index:4;pointer-events:none;border-radius:4px;justify-content:center;align-items:center;margin-left:-14px;display:flex;position:absolute;top:-15px;left:50%;transform:rotate(45deg)}.bg-branch-emblem>span{color:#fff;letter-spacing:.02em;font-size:11px;font-weight:800;transform:rotate(-45deg)}.bg-block.kind-branch .bg-block__tag.branch{font-weight:800}.bg-block.kind-branch.vertical-card:not(.expanded)>.bg-block__head{clip-path:none}.bg-block.kind-branch.vertical-card:not(.expanded) .vertical-ports.in{clip-path:polygon(14px 0,calc(100% - 14px) 0,100% 14px,100% 100%,0 100%,0 14px);border-radius:0}.bg-block.kind-branch.vertical-card:not(.expanded) .vertical-ports.out{clip-path:polygon(0 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,14px 100%,0 calc(100% - 14px));border-radius:0}.bg-block.kind-branch.vertical-card .bg-branch-emblem{margin-top:-14px;margin-left:0;top:50%;left:-22px}.bg-block.kind-merge.branch-waiting{outline:none}.bg-block.kind-merge.branch-waiting .bg-merge path{stroke-dasharray:6 4}.add-menu__pop{z-index:30;flex-direction:column;gap:4px;min-width:176px;padding:8px;display:flex;position:absolute;top:calc(100% + 8px);right:0}.add-menu__item{text-align:left;cursor:pointer;border-radius:8px;align-items:center;gap:12px;padding:8px;display:flex}.add-menu__item:hover,.add-menu__item:focus-visible{background:var(--primary-soft);outline:none}.add-menu__item b{flex:1;font-size:13px;display:block}.add-menu__key{border:1px solid var(--line);color:var(--text-muted);border-radius:4px;padding:4px 6px;font:600 11px/1 ui-monospace,monospace}.add-menu__icon{width:32px;height:24px;color:var(--primary-strong);border:2px solid var(--primary-strong);background:var(--bg-card);flex:none;justify-content:center;align-items:center;font-size:9px;font-weight:800;display:inline-flex}.add-menu__icon.block{border-radius:4px}.add-menu__icon.branch{border-radius:3px;width:22px;height:22px;margin:0 5px;font-size:0;transform:rotate(45deg)}.add-menu__icon.branch:after{content:"IF";font-size:9px;transform:rotate(-45deg)}.add-menu__icon.merge{border-radius:4px 50% 50% 4px}.branch-picker{border:1.5px solid var(--primary-strong);background:var(--bg-card);border-radius:8px;flex-direction:column;gap:8px;padding:8px 8px 8px 16px;display:flex}.branch-picker__head{justify-content:space-between;align-items:center;gap:8px;min-height:28px;display:flex}.branch-picker__question{color:var(--text);margin:0;font-size:13px;line-height:20px}.branch-picker__note{color:var(--accent);margin:0;font-size:12px;line-height:18px}.branch-picker__list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.branch-picker__item{align-items:center;gap:8px;min-height:32px;display:flex}.branch-picker__name{flex:1;align-items:center;gap:8px;min-width:0;font-size:13px;font-weight:600;display:flex}.branch-picker__mark{text-align:center;width:16px;color:var(--primary-strong);flex:none;font-size:11px}.branch-picker__item[data-state=chosen] .branch-picker__name{color:var(--primary-strong);font-weight:800}.branch-picker__item[data-state=skipped] .branch-picker__name{opacity:.55;text-decoration:line-through}.meta-chip.branch-chosen{background:var(--primary);color:var(--on-primary);border-color:var(--primary);opacity:1}.unprepared-list{color:var(--accent);flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.unprepared-list li:before{content:"●";vertical-align:2px;margin-right:6px;font-size:8px}.unprepared-list__item{color:inherit;font:inherit;text-align:left;cursor:pointer;text-underline-offset:3px;background:0 0;border:0;padding:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.unprepared-list__item:hover{text-decoration-style:solid}.task-table__unprepared{color:var(--accent);font-weight:600}.lint-list__count{opacity:.7;margin-left:4px;font-weight:400}.lint-list [data-severity=error] .label{color:var(--accent)}.review-state{flex-direction:column;gap:4px;display:flex}.review-state__row{flex-wrap:wrap;align-items:center;gap:8px;min-height:24px;display:flex}.review-state__label,.review-state__by,.review-state__changed{color:var(--text-muted)}.review-state__changed{color:var(--accent)}.review-state__note{flex:1;gap:4px;min-width:160px;display:flex}.review-state__note .input{flex:1;padding:2px 6px;font-size:12px}.meta-chip.review-none{opacity:.55;border-style:dashed}.meta-chip.review-ok{background:var(--primary);color:var(--on-primary);border-color:var(--primary);opacity:1}.meta-chip.review-stale{border:1px dashed var(--accent);color:var(--accent);background:0 0}.readiness-fields{border:1px dashed var(--accent);border-radius:8px;flex-direction:column;gap:8px;padding:8px;display:flex}.readiness-fields__head{color:var(--accent);font-size:11px;font-weight:700}.readiness-fields__row{flex-direction:column;gap:4px;display:flex}.readiness-fields__label{color:var(--text);font-size:12px}.readiness-fields__inputs{align-items:center;gap:4px;display:flex}.readiness-fields__note{color:var(--accent);font-size:11px}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
package/dist/index.html CHANGED
@@ -27,8 +27,8 @@
27
27
  } catch (e) {}
28
28
  })();
29
29
  </script>
30
- <script type="module" crossorigin src="./assets/index-wmf5YkIk.js"></script>
31
- <link rel="stylesheet" crossorigin href="./assets/index-B0rLWujQ.css">
30
+ <script type="module" crossorigin src="./assets/index-DSK28cPU.js"></script>
31
+ <link rel="stylesheet" crossorigin href="./assets/index-T2Nrf6LN.css">
32
32
  </head>
33
33
  <body>
34
34
  <div id="root"></div>
@@ -16,22 +16,29 @@ boxglow.json はリポジトリ直下に置く (`npx boxglow init --name "<プ
16
16
  ### 作業のたびに守ること
17
17
 
18
18
  1. **最初に読む**: `npx boxglow resume` (または `npx boxglow status --brief`) で、作業中・判断待ち・AI 未確認の回答・次の候補・未完了の引き継ぎメモを読む。前のセッションの続きは、ここに出る引き継ぎメモから再開する。`npx boxglow show <block>` で担当するボックスの入出力を確認する
19
- 2. **着手を記録**: ボックスに取りかかるとき `npx boxglow start <block> --note "<何をするか>"`。同時に進めるボックスは 1〜2 個まで。
20
- 確認トークンの要求 (guard) が有効な計画では、先に `npx boxglow context <block>` を読み、出力の `contextToken` (確認トークン) を付ける:
19
+ 2. **準備を確認**: 取りかかる前に `npx boxglow context <block>` を読む。出力の `readiness` が準備の状態: `state` が `ready` なら着手できる。`unprepared` (要具体化) なら `unprepared` の理由と `next` の次の一手に従って先に具体化する。`waiting` は必須の入力か分岐の答えを待っている
20
+ 3. **受け持ち、具体化**: 具体化や分解の前に `npx boxglow claim <block>` で受け持ちだけを取る (実行中にはならない。受け持ち制御が無効な計画では「取得不要」で正常終了する)。そのうえで不足を埋める:
21
+ - 出力の予定成果物: `npx boxglow port <block> --expect "<出力名>=file:src/x.ts"` (kind は file / dir / url / doc / note / decision / result。hint はパスの見当や題名。まだ作っていないファイルでよい)
22
+ - 完了条件: `npx boxglow scope <block> --acceptance "<完了と判断する条件>"`。処理の範囲は `--goal`
23
+ - 1 つのボックスで出力を作る見通しが立たないなら `npx boxglow split <block> --spec '<JSON>'` で中に小さなボックスを置く。今回着手する子だけ expect / acceptance を書き、先の子は題名と出力だけでよい (要具体化として残る)。入力は不明なら省略してよい (自動で上の階層の入力になる)
24
+ - 対象のファイルが分からないときは、架空のファイルを書かず「対象を特定する調査」のボックスを出力 `note` で作って始める
25
+ 4. **着手を記録**: 準備ができたら `npx boxglow context <block>` を読み直してから `npx boxglow start <block> --note "<何をするか>"`。同時に進めるボックスは 1〜2 個まで。
26
+ 確認トークンの要求 (guard) が有効な計画では、出力の `contextToken` (確認トークン) を付ける:
21
27
  `npx boxglow start <block> --note "<何をするか>" --context-token <確認トークン>` (下の「確認トークンと引き継ぎ」を参照)
22
- 3. **分解**: 1 つのボックスで出力を作る見通しが立たないときは、`npx boxglow split <block> --spec '<JSON>'` で中に小さなボックスを置く。各ボックスに出力 (成果物) を必ず決める。入力は不明なら省略してよい (自動で上の階層の入力になる)
23
- 4. **完了を記録**: 出力の成果物ができたら `npx boxglow done <block> --artifact "<名前>=<リポジトリ内のパス>"`。
28
+ 要具体化のボックスへの start は既定では警告 (理由と次の一手が出る)。`policy --unprepared reject` の計画では開始できない (`--reason` では通れない。人の操作は通る)。出力を子に任せきりの親も実行するものが無いので、子を start する
29
+ 5. **完了を記録**: 出力の成果物ができたら `npx boxglow done <block> --artifact "<名前>=<リポジトリ内のパス>"`。
24
30
  guard が有効なら `--context-token <確認トークン>` を付ける (直前の自分の操作の出力に「新しい確認トークン: <token>」が出ていれば、それを使う)。
25
31
  HEAD にコミット済みで内容が一致するファイルは「コミット + パス + 中身のハッシュ」で記録される (アップロードはしない)。未コミット・未追跡のファイルはローカル参照として残り、コミットした後の `npx boxglow check` で Git の参照に補完される。記録のためだけにコミットしない。全階層が必要なら `npx boxglow status` を読む。PR や外部資料は URL でもよい。
26
32
  成果物だけ先に付けるなら `npx boxglow artifact <block> <パス>`。進捗の途中経過は `npx boxglow set <block> --progress 60`
27
- 5. **人間の判断が要る**: `npx boxglow ask <block> "<質問>" --options "A|B"`。回答があるまでそのボックスは進めず、他のボックスへ移る。人の回答は `status` の「回答あり」に出る。読んだら `npx boxglow ack <block>` で引き取る (そのボックスの `start` / `done` / `set` などでも自動で引き取られる)。引き取るまで人の画面には「AI 未確認」として残り、人が答えを直せる。回答の中に問い返しがあれば、`ask` と `answer --by <自分>` で自分の答えも記録する
28
- 6. **詰まったら**: `npx boxglow blocked <block> --note "<困っていること>"`
29
- 7. **成果物の確認**: ファイルを移動・改名したら `npx boxglow check` を実行する (移動を検出してパスを付け替える。見つからなければ印が付く)
30
- 8. **中断・引き継ぎの前に**: セッションの終わり・コンテキストの圧縮・他の AI や人への引き継ぎの前に、`npx boxglow checkpoint <block> --note "分かったこと; 次にすること; 未解決のこと"` で引き継ぎメモを残す (guard が有効なら `--context-token <確認トークン>` を付ける)。会話の履歴が消えても計画の中に残り、次のセッションが `resume` と `context` で読む
31
- 9. **報告**: 作業の最後に `npx boxglow status --brief` の内容を要約して報告する
33
+ 6. **人間の判断が要る**: `npx boxglow ask <block> "<質問>" --options "A|B"`。回答があるまでそのボックスは進めず、他のボックスへ移る。人の回答は `status` の「回答あり」に出る。読んだら `npx boxglow ack <block>` で引き取る (そのボックスの `start` / `done` / `set` などでも自動で引き取られる)。引き取るまで人の画面には「AI 未確認」として残り、人が答えを直せる。回答の中に問い返しがあれば、`ask` と `answer --by <自分>` で自分の答えも記録する
34
+ 7. **詰まったら**: 入力 (前のボックスの成果物・資料) が足りないことが原因なら、詰まりにしない。`npx boxglow show <block>` で入力の配線を確かめ、足りないものを作るボックスが無ければ `npx boxglow add` で外 (上流) に作り、`npx boxglow connect` でこのボックスの入力につなぐ (配線が「待ち」の色で残り、何を待っているかが図で見える)。選択肢から選んでもらえば進めるなら `ask`。それ以外の、計画の外にある障害 (環境が動かない、権限やキーが無い、外部の返事待ち、原因の分からない失敗) だけを `npx boxglow blocked <block> --note "<困っていること>"` で記録する
35
+ 8. **成果物の確認**: ファイルを移動・改名したら `npx boxglow check` を実行する (移動を検出してパスを付け替える。見つからなければ印が付く)
36
+ 9. **中断・引き継ぎの前に**: セッションの終わり・コンテキストの圧縮・他の AI や人への引き継ぎの前に、`npx boxglow checkpoint <block> --note "分かったこと; 次にすること; 未解決のこと"` で引き継ぎメモを残す (guard が有効なら `--context-token <確認トークン>` を付ける)。会話の履歴が消えても計画の中に残り、次のセッションが `resume` と `context` で読む
37
+ 10. **報告**: 作業の最後に `npx boxglow status --brief` の内容を要約して報告する
32
38
 
33
39
  ### 構造の約束
34
40
 
41
+ - **まだ決まっていない分かれ道は分岐で表す**: 計画を作る時点で、判断次第で後の作業 (道) が変わるときは `npx boxglow branch "<題名>" --options "A|B" --question "<問い>" --context "<判断材料>"` で分岐のボックスを作る。選択肢ごとに道 (出力) ができるので、それぞれの道の最初のボックスへ `connect` する。道が後で 1 つにまとまるところには `npx boxglow join --title "<題名>"` で合流の部品を置き、それぞれの道の最後の出力をこの部品へ `connect` し、部品の出力を先の箱へつなぐ (どれか 1 つの道が届けば先へ進む)。人が答えると、選ばなかった道の先は「見送り」になり、進捗と次の候補から外れる。すでに作ったボックスが実は決まっていない分かれ道だと分かったら、`npx boxglow branch --box <block> --options "A|B" --question "<問い>"` で分岐に変える (今の出力が 1 つ目の選択肢の道になり、線は残る)。答えが出る前の道のボックスは「分岐待ち」で、着手すると警告される (先に下調べするなど理由があれば `--reason` で記録する)
35
42
  - 最上位には「入力ノード」「最終成果物ノード」と「プロジェクトのボックス」だけがある。タスクはプロジェクトのボックスの中に置く (`add` の既定の親は最初のプロジェクトのボックス)
36
43
  - 階層の深さに制限はない。`split` は何段でも使える
37
44
  - 別のプロジェクトでも使えそうなボックス (例: 入力画像のモノクロ化) は `npx boxglow export-block <block> --out <名前>.boxglow-block.json` でテンプレートにし、
@@ -44,17 +51,43 @@ boxglow.json はリポジトリ直下に置く (`npx boxglow init --name "<プ
44
51
  ```json
45
52
  {
46
53
  "blocks": [
47
- { "title": "設計", "description": "やること", "inputs": ["仕様"], "outputs": ["設計書"] },
48
- { "title": "実装", "inputs": ["設計書"], "outputs": ["コード"] }
54
+ { "title": "対象箇所を特定する", "inputs": ["再現手順"], "outputs": ["調査メモ"],
55
+ "expect": "note:対象のファイルと処理、根拠、変更候補、確認方法、未決事項", "acceptance": "変更するファイルと処理が決まり、後続のボックスに expect と acceptance を設定できる。または、設定できない理由と必要な判断が分かる",
56
+ "goal": "再現して経路を追う。製品コードの修正は今回の範囲外" },
57
+ { "title": "保存の再試行後に同期状態を取り直す", "inputs": ["調査メモ"], "outputs": ["修正"],
58
+ "expect": "file:src/sync/state.ts", "acceptance": "保存を一度失敗させ、再保存後に同期状態と操作が戻る (テストで確認)" },
59
+ { "title": "リリースノートを書く", "inputs": ["修正"], "outputs": ["ノート"] }
49
60
  ],
50
61
  "connections": [
51
- { "from": "parent.仕様", "to": "設計.仕様" },
52
- { "from": "設計.設計書", "to": "実装.設計書" },
53
- { "from": "実装.コード", "to": "parent.出力" }
62
+ { "from": "parent.再現手順", "to": "対象箇所を特定する.再現手順" },
63
+ { "from": "対象箇所を特定する.調査メモ", "to": "保存の再試行後に同期状態を取り直す" },
64
+ { "from": "保存の再試行後に同期状態を取り直す.修正", "to": "リリースノートを書く" },
65
+ { "from": "リリースノートを書く.ノート", "to": "parent.出力" }
54
66
  ]
55
67
  }
56
68
  ```
57
69
 
70
+ `expect` (予定成果物: `"kind:hint"` または `{ "kind", "hint" }`)、`acceptance` (完了条件)、`goal` (今回行う処理) は今回着手する子だけに書く。
71
+ 3 つ目の子のように題名と出力だけの子は「要具体化」として残り、着手する番になってから `port --expect` / `scope --acceptance` で決める。
72
+ 親自身が作る出力 (子の成果を統合するなど) は `"parentMakes": ["出力名"]` で印を付ける (子の結線と重なると「担当が重複」と案内される)。
73
+ `"splitBy": "工程"` で直下の子の分け方を一語で残す (工程 / 成果物 / 機能 など。`set <block> --split-by` でも書ける)。同じ階層の子は同じ分け方・同じ具体度にそろえる。
74
+ `split` が保存しないのは壊れた構造 (結線先が無い、循環、形の違う expect) だけ。子が 1 個、親の出力を作る子がまだ無い、といった途中の分解は保存され、不足として表示される。
75
+ 分解の後と着手の前に `npx boxglow lint <block>` を読む。「必ず直す」(親出力の担当の未定・重複、同じ分岐の排他の道の両方を必須にしている、作業中なのに予定成果物・完了条件が無い、検査の対象そのものの欠落) は直してから進む。
76
+ 「着手の前に埋める」(まだ始めていないボックスの予定成果物・完了条件) は、その子の着手の番で埋めればよい (先の仕事の分を今、形だけ書かない)。
77
+ 「見直し候補」(子が 1 個、どこにもつながらない出力、形だけの記入、道の先が無い分岐、入力 1 本の合流、兄弟の同じ予定成果物) は内容を見て判断する (機械は拒否しない)。`context` にも件数と上位 3 件が出る。
78
+
79
+ **内容のレビュー (意味は機械では判定できないので、AI か人が材料を読んで評価し、根拠を残す)**
80
+ - 分解した後: `npx boxglow review-split <親>` で材料 (親の目的・制約・完了条件・入出力、子の対象・入出力・予定成果物・完了条件、結線) とチェック項目を読み、評価したら `npx boxglow split-ok <親> --note "<根拠: 何を確認したか>"` で記録する。
81
+ - 着手する前: `npx boxglow review-box <block>` で材料 (対象・処理・予定成果物・確認方法、入力の供給元、上流の分岐の答え) を読み、`npx boxglow box-ok <block> --note "<根拠>"` で記録する。
82
+ - 記録は「評価したと申告し根拠を残した記録」であり、妥当性の証明ではない。材料が変わると `context` の `reviews` が `stale` (何が変わったかと、何を確認すればよいかの案内つき) になる。`stale` は「分解が不正」ではなく「前回の確認後に材料が変わった」という意味。位置や配色、進捗、担当の変更では古くならない。分解の記録は分岐の答えでは古くならず、着手準備の記録は答えが変わると古くなる。
83
+ - 先の子を着手の番で具体化すると、親の分解の記録は必ず `stale` になる (子の expect / acceptance も材料のため)。その子の expect・scope を一通り書き終えてから、変わった子と、親の完了条件・対象外範囲・兄弟との分担への影響だけを確認し、整合すれば `split-ok <親> --note "B181 の具体化を確認。親の対象外範囲に入らず、B182 との分担は重複しない"` のように更新する。port や scope の操作ごとに再確認はしない。複数の子を同時に具体化したら、まとめて確認してよい。
84
+ - 着手の条件にはしていない (既定でも reject の計画でも)。`start` を止めるのは要具体化と入力待ちだけ。
85
+
86
+ **分岐・合流を AI が使う**
87
+ - `ask` に選択肢を付けたとき、答えで後の作業が分かれるなら `--branch` を付ける: そのボックスが分岐になり、選択肢ごとの道 (出力) ができる。各道の最初のボックスへ `connect` し、道がまとまるところに `join` を置く。
88
+ - `split` の JSON でも作れる: 子に `"branch": { "question": "...", "options": ["A", "B"] }` で分岐のボックス (出力は選択肢の名前)、`"join": true` で合流の部品。例:
89
+ `{ "blocks": [{ "title": "認証方式を決める", "branch": { "question": "どれ?", "options": ["メール", "OAuth"] } }, { "title": "メールで実装", "outputs": ["認証"] }, { "title": "OAuth で実装", "outputs": ["認証"] }, { "title": "合流", "join": true }], "connections": [{ "from": "認証方式を決める.メール", "to": "メールで実装" }, { "from": "認証方式を決める.OAuth", "to": "OAuth で実装" }, { "from": "メールで実装.認証", "to": "合流" }, { "from": "OAuth で実装.認証", "to": "合流" }, { "from": "合流.合流", "to": "parent.認証" }] }`
90
+ - `lint` は、同じ分岐の排他の道の両方を 1 つのボックスが必須にしている (両方が届くことはない) を「必ず直す」、道の先が無い・合流の入力が 1 本を「見直し候補」として出す。
58
91
  `parent.<名前>` は分解するボックス自身の入力 / 出力。`<block>` は短い ID (B12 など。status に出る) か題名。
59
92
  下の階層を持たないボックスの出力は 1 本 (outputs は 1 つだけ書く)。題名は「何を作るか」が分かる短い言葉にする。
60
93
  期日や時間は `npx boxglow set <block> --due 2026-10-15 --start 2026-10-01 --estimate 8 --hours 3.5` で記録する。
@@ -95,17 +128,37 @@ npx boxglow done B12 --artifact "<名前>=<パス>" --context-token <新しい
95
128
 
96
129
  ### 着手・完了、今回の範囲、記録の鮮度
97
130
 
98
- - 最初に resume の現況 (活動・判断待ち・未確認回答) を読む。候補は「今回の範囲 / その他」の各組で「着手できる / 入力待ち」に分かれ、不足する入力名が出る。入力待ちを、準備済みと取り違えない。
131
+ - 最初に resume の現況 (活動・判断待ち・未確認回答) を読む。候補は「今回の範囲 / その他」の各組で「着手できる / 要具体化 / 入力待ち」に分かれ、要具体化の理由と不足する入力名が出る。要具体化や入力待ちを、準備済みと取り違えない。
132
+ - 「着手できる」(Ready) は、自身が作る出力があり、その予定成果物 (expect) と完了条件 (acceptance) が書かれ、必須の入力がそろっている、という機械検査の結果。内容が具体的かどうかまでは保証しない (`expect = src/`、`acceptance = 動作する` でも通る)。対象・処理・成果・確認方法を第三者が追えるように書く。
99
133
  - ボックスの任意4項目を scope で設定する。goal = 今回達成すること、non-goals = 今回は扱わないこと、acceptance = 完了と判断する条件、consult = 範囲を広げる前に相談する条件。context の先頭で対象と親の範囲を読み、着手前と完了前に照合する。完了条件の本文をAIが満たしたかは自動判定しない。
100
134
  - scope B12 --goal "達成すること" --non-goals "今回扱わないこと" --acceptance "確認する条件" --consult "相談する条件" で設定する。scope B12 は表示だけ。各項目に none または空文字を渡すと消す。画面では詳細パネルの ⋯ →「作業範囲を編集」。記入済みの項目だけが「今回の範囲」に出る。
101
135
  - focus B12 でこのボックスと配下を次候補の先頭にする。focus は現在の対象の表示、focus none は解除。対象外も別の組に残る。候補に出ること自体は作業範囲の拡大や公開を許可しない。
102
136
  - start の必須入力不足は既定で警告するが、従来どおり開始できる。先行作業が必要なら --reason "先に行う理由" を付ける。警告は出ず、理由は活動とログに残る。done の出力成果物なしも既定で警告のみ。既存の出力成果物または --artifact を数え、ボックスの参考資料は数えない。
103
- - 計画で選ぶ場合だけ policy --start reject --done reject にする。それぞれ warn に戻せる。入力待ちの拒否でも理由付きの開始は可能。成果物なしの拒否は set --status white にも効く。人の操作 (画面 / --actor human) は拒否しない。AIが拒否を避けるために人を名乗ったり、設定を弱めたりしない。
137
+ - 計画で選ぶ場合だけ policy --start reject --done reject --unprepared reject にする。それぞれ warn に戻せる。入力待ちの拒否でも理由付きの開始は可能だが、要具体化の拒否は理由では通れない (先に具体化する)。成果物なしの拒否は set --status white にも効く。人の操作 (画面 / --actor human) は拒否しない。AIが拒否を避けるために人を名乗ったり、設定を弱めたりしない。
104
138
  - guard 有効時、scope の変更、focus の設定・解除、policy の変更にも --context-token が必要。scope/focus/policy を変えると新しいトークンが出るので、次の操作はそれを使う。表示だけには不要。
105
139
  - resume は完了済みの引き継ぎ本文を隠し、件数だけ示す。履歴が必要な場合だけ resume --include-completed で展開する (context / show では個別に読める)。
106
140
  - 説明は descriptionUpdatedAt、状態は statusChangedAt、引き継ぎは既存の at で日時を確認できる。状態変更より古いメモはその旨を示す。旧記録の不明な日時は補わない。「新しい記録」は真偽の保証ではない。
107
141
  - Done で古い状況説明が残る可能性がある場合、CLI・詳細パネル・resume に見直し案内が出る。本文は自動で消さない。内容を確認し、必要なら set B12 --note "現在の説明" (none で消去) または画面の Notes で直す。
108
- - MCP は boxglow_scope / boxglow_focus / boxglow_policy、boxglow_start の reason、boxglow_resume の includeCompleted を使う。変更には contextToken を付ける。
142
+ - MCP は boxglow_scope / boxglow_focus / boxglow_policy、boxglow_claim、boxglow_port の expect / self、boxglow_start の reason、boxglow_resume の includeCompleted を使う。変更には contextToken を付ける。
109
143
  - データ形式は v5 のままで全項目は任意。旧版 (0.4.2以前) は新しい規則を実行せず、保存時に計画の workflowPolicy / focusBlockId を落とす。これらを使う計画の書き手 (CLI・serve・画面・拡張内のアプリ) は対応したビルドに揃える。版番号だけでなくビルド日時も確認する。
110
144
 
145
+
146
+ ### Sync decisions
147
+
148
+ AI may only sync already bound projects and inspect comparisons. If sync stops for a conflict or a human choice, summarize the differences and use ask to notify the user. Never resolve conflicts, create a new binding, relink, recover, adopt, restore, or confirm an account. A human must use the UI or explicitly run CLI with --actor human. AI must never add --actor human, including after a chat answer; record the answer and wait for the human to apply the sync choice.
149
+
150
+ Codexは全CLI呼び出しに `--actor codex`、Claude Codeは `--actor claude-code` を明示する。WSLなどでは実行環境の印が渡らないことがある。サブエージェントは `codex-作業名` などに分け、人を名乗らない。
151
+
152
+ ### 並列作業の受け持ち
153
+
154
+ 計画で受け持ちが有効なら、CLI実行ごとに一意の `BOXGLOW_INSTANCE_ID` を固定し、`claims` と `context` を読んでから `claim` (具体化・分解の前) または `start` (実行) する。`claim` で取った受け持ちは、そのまま `start` に引き継がれる。独立したエージェント間で実行IDを共有しない。既定はボックスのみ、必要なら `--scope subtree`。成功したCLAIM行のtokenを保持し、保存する操作に `--claim-token` を付ける。MCPは実行IDと受領証を自動で保持する。5分ごと (期限が短ければ半分以内) に `claim-renew` / `boxglow_claim_renew` を呼び、中断前はcheckpoint。done/leaveは対象の受け持ちを解放する。期限切れや世代違いを無視せず、最新contextを確認して取り直す。同名actorでも別実行の受け持ちは奪わない。設定・強制解除・同期競合の解決は人に依頼し、AIがhumanを名乗って代行しない。共有ファイル以外の同期コピー間には排他保証がない。詳しくは `docs/CLAIMS.md`。
155
+
156
+ 他者の実行ID・受領証を使わない。計画やclaimsの出力から他者の受領証を組み立てることも禁止。MCP再起動後の同名actorも別実行なので、自動で引き継がず期限を待つか人に解除を頼む。
157
+
158
+ 入力の自動引き上げは元のボックスの範囲で扱う。共有入力の内容変更や別ボックスへの配置変更には、影響する範囲の取得も必要。focusやgroupなど計画全体の設定には `context root` → `claim root` でrootを取得し、そのCLAIMを渡す (`start root` でも取れるが、実行中にはしない `claim` を使う)。rootのみの取得は通常のボックスを含まない。計画設定の変更はrootのみで足りる。rootのsubtreeは並行作業を全部止めるので、AIは使わず人に相談する。rootの終了は `leave root`。context guardの確認トークンも引き続き必要。
159
+
111
160
  ---
161
+
162
+ 同期の人専用操作は、強制的な権限分離ではなく誤操作の防止です。AI は `--actor human` を名乗らず、比較と停止理由を人へ伝えてください。MCP と AI として識別した CLI は、人用の選択コマンドを出力しません。
163
+
164
+ 人のCLI操作は `--actor human:名前` も受け付けます。AIはこの形でも人を名乗らないでください。AI向け停止文の `boxglow sync --help` は、AI環境を引き継いだ人への案内です。AIの代行許可ではありません。