@@ -1100,8 +1100,60 @@ export const WorkflowView = _.flow(
11001100                        ] ) , 
11011101                  ] ) , 
11021102              ] ) , 
1103-               div ( {  style : {  display : 'flex' ,  alignItems : 'baseline' ,  minWidth : 'max-content'  }  } ,  [ 
1104-                 span ( {  style : {  marginTop : '1.0rem' ,  marginBottom : '0.5rem'  }  } ,  [ 
1103+               div ( [ 
1104+                 span ( [ 
1105+                   'Runtime options: ' , 
1106+                   h ( InfoBox ,  {  style : {  marginLeft : '0.1rem' ,  whiteSpace : 'pre-line'  }  } ,  [ 
1107+                     'Terra will remember these submission settings in this browser.' , 
1108+                   ] ) , 
1109+                 ] ) , 
1110+               ] ) , 
1111+               isFeaturePreviewEnabled ( PREVIEW_COST_CAPPING )  && 
1112+                 div ( 
1113+                   { 
1114+                     style : { 
1115+                       display : 'flex' , 
1116+                       flexDirection : 'column' , 
1117+                       alignSelf : 'flex-start' , 
1118+                       marginTop : '0.0rem' , 
1119+                       fontSize : 12 , 
1120+                     } , 
1121+                   } , 
1122+                   [ 
1123+                     span ( [ 
1124+                       'Set cost limit per workflow (BETA) ' , 
1125+                       h ( InfoBox ,  {  style : {  marginLeft : '0.1rem' ,  whiteSpace : 'pre-line'  }  } ,  [ 
1126+                         'Important cost limit considerations:' , 
1127+                         h ( 'br' ) , 
1128+                         '1. Costs are in USD.' , 
1129+                         h ( 'br' ) , 
1130+                         '2. Costs are VM and disk costs only. Bucket storage and egress costs are not included.' , 
1131+                         h ( 'br' ) , 
1132+                         '3. Based on GCP list prices. Discounts are not included.' , 
1133+                         h ( 'br' ) , 
1134+                         '4. GPU costs are not included (coming soon!).' , 
1135+                         h ( 'br' ) , 
1136+                         '5. Workflows may not terminate immediately upon hitting limit, plan for a margin of error.' , 
1137+                         h ( 'br' ) , 
1138+                         '6. Workflow costs vary by input. Set a limit that considers variability.' , 
1139+                       ] ) , 
1140+                     ] ) , 
1141+                     div ( {  style : {  display : 'flex' ,  alignItems : 'center' ,  marginLeft : '0rem' ,  marginBottom : '0.5rem'  }  } ,  [ 
1142+                       span ( {  style : {  marginRight : '0.5rem'  }  } ,  [ '$' ] ) , 
1143+                       h ( NumberInput ,  { 
1144+                         id : 'workflow-run-budget' , 
1145+                         value : perWorkflowCostCap  ||  '' , 
1146+                         min : 0.01 , 
1147+                         max : 9999999999.99 , 
1148+                         placeholder : 'Example: 1.00' , 
1149+                         onChange : ( v )  =>  this . setState ( {  perWorkflowCostCap : v  ? v . toFixed ( 2 )  : undefined  } ) , 
1150+                         style : {  fontSize : 12 ,  marginTop : '0.5rem' ,  width : '100%' ,  marginLeft : '0.1rem'  } , 
1151+                       } ) , 
1152+                     ] ) , 
1153+                   ] 
1154+                 ) , 
1155+               div ( {  style : {  fontSize : 12 ,  display : 'flex' ,  alignItems : 'baseline' ,  minWidth : 'max-content'  }  } ,  [ 
1156+                 span ( {  style : {  marginTop : '0.5rem' ,  marginBottom : '0.5rem'  }  } ,  [ 
11051157                  div ( [ 
11061158                    span ( {  style : {  ...styles . checkBoxSpanMargins ,  marginLeft : 0  }  } ,  [ 
11071159                      h ( 
@@ -1200,7 +1252,7 @@ export const WorkflowView = _.flow(
12001252                                  isClearable : false , 
12011253                                  onlyInteger : false , 
12021254                                  value : retryMemoryFactor , 
1203-                                   style : {  width : '5rem'  } , 
1255+                                   style : {  fontSize :  12 ,   width : '5rem'  } , 
12041256                                  onChange : ( v )  =>  this . setState ( {  retryMemoryFactor : v  } ) , 
12051257                                } ) , 
12061258                              ] ) , 
@@ -1248,7 +1300,7 @@ export const WorkflowView = _.flow(
12481300                            placeholder : 'Script' , 
12491301                            value : monitoringScript , 
12501302                            onChange : ( v )  =>  this . setState ( {  monitoringScript : v  } ) , 
1251-                             style : {  marginTop : '0.5rem' ,  width : '90%' ,  marginRight : '0.5rem'  } , 
1303+                             style : {  fontSize :  12 ,   marginTop : '0.5rem' ,  width : '90%' ,  marginRight : '0.5rem'  } , 
12521304                          } ) , 
12531305                          h ( InfoBox ,  [ 'Standalone .sh script that runs inside task container' ] ) , 
12541306                        ] ) , 
@@ -1258,7 +1310,7 @@ export const WorkflowView = _.flow(
12581310                            placeholder : 'Image' , 
12591311                            value : monitoringImage , 
12601312                            onChange : ( v )  =>  this . setState ( {  monitoringImage : v  } ) , 
1261-                             style : {  marginTop : '0.5rem' ,  width : '90%' ,  marginRight : '0.5rem'  } , 
1313+                             style : {  fontSize :  12 ,   marginTop : '0.5rem' ,  width : '90%' ,  marginRight : '0.5rem'  } , 
12621314                          } ) , 
12631315                          h ( InfoBox ,  [ 'Image that runs as a sibling alongside task container' ] ) , 
12641316                        ] ) , 
@@ -1268,57 +1320,13 @@ export const WorkflowView = _.flow(
12681320                            placeholder : 'Image script' , 
12691321                            value : monitoringImageScript , 
12701322                            onChange : ( v )  =>  this . setState ( {  monitoringImageScript : v  } ) , 
1271-                             style : {  marginTop : '0.5rem' ,  width : '90%' ,  marginRight : '0.5rem'  } , 
1323+                             style : {  fontSize :  12 ,   marginTop : '0.5rem' ,  width : '90%' ,  marginRight : '0.5rem'  } , 
12721324                          } ) , 
12731325                          h ( InfoBox ,  [ 'Script that runs inside the sibling container' ] ) , 
12741326                        ] ) , 
12751327                      ] ) , 
12761328                  ] ) , 
12771329                ] ) , 
1278-                 isFeaturePreviewEnabled ( PREVIEW_COST_CAPPING )  && 
1279-                   div ( 
1280-                     { 
1281-                       style : { 
1282-                         display : 'flex' , 
1283-                         flexDirection : 'column' , 
1284-                         marginLeft : '2rem' , 
1285-                         alignSelf : 'flex-start' , 
1286-                         marginBottom : '-2rem' , 
1287-                       } , 
1288-                     } , 
1289-                     [ 
1290-                       span ( {  style : {  fontWeight : 'bold'  }  } ,  [ 
1291-                         'Set cost limit per workflow (BETA) ' , 
1292-                         h ( InfoBox ,  {  style : {  marginLeft : '0.1rem' ,  whiteSpace : 'pre-line'  }  } ,  [ 
1293-                           'Important cost limit considerations:' , 
1294-                           h ( 'br' ) , 
1295-                           '1. Costs are in USD.' , 
1296-                           h ( 'br' ) , 
1297-                           '2. Costs are VM and disk costs only. Bucket storage and egress costs are not included.' , 
1298-                           h ( 'br' ) , 
1299-                           '3. Based on GCP list prices. Discounts are not included.' , 
1300-                           h ( 'br' ) , 
1301-                           '4. GPU costs are not included (coming soon!).' , 
1302-                           h ( 'br' ) , 
1303-                           '5. Workflows may not terminate immediately upon hitting limit, plan for a margin of error.' , 
1304-                           h ( 'br' ) , 
1305-                           '6. Workflow costs vary by input. Set a limit that considers variability.' , 
1306-                         ] ) , 
1307-                       ] ) , 
1308-                       div ( {  style : {  display : 'flex' ,  alignItems : 'center' ,  marginLeft : '0rem'  }  } ,  [ 
1309-                         span ( {  style : {  marginRight : '0.5rem'  }  } ,  [ '$' ] ) , 
1310-                         h ( NumberInput ,  { 
1311-                           id : 'workflow-run-budget' , 
1312-                           value : perWorkflowCostCap  ||  '' , 
1313-                           min : 0.01 , 
1314-                           max : 9999999999.99 , 
1315-                           placeholder : 'Example: 1.00' , 
1316-                           onChange : ( v )  =>  this . setState ( {  perWorkflowCostCap : v  ? v . toFixed ( 2 )  : undefined  } ) , 
1317-                           style : {  marginTop : '0.5rem' ,  width : '100%' ,  marginLeft : '0.1rem'  } , 
1318-                         } ) , 
1319-                       ] ) , 
1320-                     ] 
1321-                   ) , 
13221330              ] ) , 
13231331              h ( StepButtons ,  { 
13241332                tabs : [ 
0 commit comments