@@ -26,7 +26,7 @@ const STAGES = [
2626 { n : '04' , name : 'PREVIEW' , file : 'preview.html' , icon : 'doc' as const } ,
2727] ;
2828
29- const ROW_Y = 232 ;
29+ const ROW_Y = 190 ;
3030const CARD_W = 210 ;
3131const GAP = 86 ;
3232const FIRST_X = 92 ;
@@ -53,7 +53,12 @@ export const SocialPreview: React.FC = () => {
5353 ) ) }
5454
5555 { /* The closed QA loop: CRITIQUE -> FORGE (revise the failed shots) */ }
56- < ReviseLoop fromX = { cardCenter ( 2 ) } toX = { cardCenter ( 1 ) } topY = { ICON_TOP + ICON_SIZE + 14 } />
56+ < ReviseLoop
57+ fromX = { cardCenter ( 2 ) }
58+ toX = { cardCenter ( 1 ) }
59+ yStart = { ICON_TOP + ICON_SIZE + 56 }
60+ yBus = { ICON_TOP + ICON_SIZE + 82 }
61+ />
5762
5863 { /* Stage cards */ }
5964 { STAGES . map ( ( s , i ) => (
@@ -199,21 +204,43 @@ const Connector: React.FC<{ x1: number; x2: number; y: number }> = ({ x1, x2, y
199204} ;
200205
201206// The v0.2.0 closed loop: critique.json feeds prompt-forge revision mode.
202- const ReviseLoop : React . FC < { fromX : number ; toX : number ; topY : number } > = ( { fromX, toX, topY } ) => {
203- const dip = topY + 40 ;
207+ // Routed as a clean right-angle feedback wire below the filenames: drop from
208+ // CRITIQUE, run left along a bus, rise into FORGE.
209+ const ReviseLoop : React . FC < { fromX : number ; toX : number ; yStart : number ; yBus : number } > = ( {
210+ fromX,
211+ toX,
212+ yStart,
213+ yBus,
214+ } ) => {
215+ const r = 9 ; // corner radius
216+ const d =
217+ `M ${ fromX } ${ yStart } ` +
218+ `L ${ fromX } ${ yBus - r } Q ${ fromX } ${ yBus } ${ fromX - r } ${ yBus } ` +
219+ `L ${ toX + r } ${ yBus } Q ${ toX } ${ yBus } ${ toX } ${ yBus - r } ` +
220+ `L ${ toX } ${ yStart } ` ;
204221 return (
205222 < svg style = { { position : 'absolute' , left : 0 , top : 0 } } width = { 1280 } height = { 720 } >
206223 < path
207- d = { `M ${ fromX } ${ topY } C ${ fromX } ${ dip } , ${ toX } ${ dip } , ${ toX } ${ topY + 6 } ` }
224+ d = { d }
208225 stroke = { COLORS . coral }
209226 strokeWidth = { 1.8 }
210227 fill = "none"
211228 strokeDasharray = "5 5"
229+ strokeLinecap = "round"
230+ strokeLinejoin = "round"
231+ />
232+ { /* arrowhead pointing up into FORGE */ }
233+ < path
234+ d = { `M ${ toX - 5 } ${ yStart + 10 } L ${ toX } ${ yStart } L ${ toX + 5 } ${ yStart + 10 } ` }
235+ stroke = { COLORS . coral }
236+ strokeWidth = { 1.8 }
237+ fill = "none"
238+ strokeLinecap = "round"
239+ strokeLinejoin = "round"
212240 />
213- < path d = { `M${ toX - 5 } ${ topY + 14 } L${ toX } ${ topY + 5 } L${ toX + 5 } ${ topY + 14 } ` } stroke = { COLORS . coral } strokeWidth = { 1.8 } fill = "none" />
214241 < text
215242 x = { ( fromX + toX ) / 2 }
216- y = { dip + 4 }
243+ y = { yBus + 20 }
217244 fill = { COLORS . coral }
218245 fontFamily = { monoFamily }
219246 fontSize = { 13 }
@@ -232,7 +259,7 @@ const BrandLockBar: React.FC = () => (
232259 position : 'absolute' ,
233260 left : 92 ,
234261 right : 92 ,
235- top : 468 ,
262+ top : 478 ,
236263 border : `1px solid ${ COLORS . ink } ` ,
237264 borderRadius : 8 ,
238265 height : 52 ,
0 commit comments