Ken, I hope you don't mind me jumping in.
John, You issue is simple your app needs a dojo theme applied.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no" />
<title>Simple Map</title>
<link rel="stylesheet" href="https://js.arcgis.com/3.23/esri/css/esri.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.23/dijit/themes/claro/claro.css">
<style>
html,
body,
#map {
height: 100%;
margin: 0;
padding: 0;
}
</style>
<script src="https://js.arcgis.com/3.23/"></script>
<script>
var map;
require([
"dojo/on",
"esri/config",
"esri/map",
"esri/layers/ArcGISDynamicMapServiceLayer",
"esri/layers/FeatureLayer",
"esri/dijit/analysis/ExtractData",
"esri/geometry/Extent",
"esri/tasks/Geoprocessor",
"dojo/domReady!"
], function(on, esriConfig, Map, ArcGISDynamicMapServiceLayer, FeatureLayer, ExtractData, Extent, Geoprocessor) {
esriConfig.defaults.io.corsEnabledServers.push('maps.ngdc.noaa.gov');
esriConfig.defaults.io.corsEnabledServers.push('gis.ngdc.noaa.gov');
esriConfig.defaults.io.corsEnabledServers.push('gisdev.ngdc.noaa.gov');
var aoi = new Extent(-44, -9, -41, 0);
console.log(aoi.toJson());
map = new Map("map", {
basemap: "topo",
center: [-122.45, 37.75],
zoom: 6
});
var layer = new ArcGISDynamicMapServiceLayer(
"https://gis.ngdc.noaa.gov/arcgis/rest/services/web_mercator/hazards/MapServer", {
id: 'natural hazards'
}
);
map.addLayer(layer);
var layers = [
new FeatureLayer("https://gisdev.ngdc.noaa.gov/arcgis/rest/services/extract/hazards_extract/MapServer/0", {
id: 'Retrospective DART Deployments'
}),
new FeatureLayer("https://gisdev.ngdc.noaa.gov/arcgis/rest/services/extract/hazards_extract/MapServer/1", {
id: 'Current DART Deployments'
}),
new FeatureLayer("https://gisdev.ngdc.noaa.gov/arcgis/rest/services/extract/hazards_extract/MapServer/2", {
id: 'Volcano Locations'
}),
new FeatureLayer("https://gisdev.ngdc.noaa.gov/arcgis/rest/services/extract/hazards_extract/MapServer/3", {
id: 'Signifigant Earthquakes'
}),
new FeatureLayer("https://gisdev.ngdc.noaa.gov/arcgis/rest/services/extract/hazards_extract/MapServer/4", {
id: 'Tsunami Observations'
}),
new FeatureLayer("https://gisdev.ngdc.noaa.gov/arcgis/rest/services/extract/hazards_extract/MapServer/5", {
id: 'Tsunami Events'
})
];
map.addLayers(layers);
on(this.map, 'layers-add-result', function() {
console.log('layers added');
var extractData = new ExtractData({
featureLayers: layers,
map: map,
analysisGpServer: "https://gisdev.ngdc.noaa.gov/arcgis/rest/services/extract/hazards_extract/GPServer"
}, "analysis-tool");
extractData.startup();
});
console.log('here');
});
</script>
</head>
<body class="claro">
<div id="map"></div>
<hr>
<br>
<div id="analysis-tool"></div>
</body>
</html>