The viewer can be placed inside your own HTML template by emitting its scripts in the head and its markup in the body.

Render the script and HTML parts separately.
$viewer = new StiViewer();
$viewer->options->height = '800px';
$viewer->process();

$report = new StiReport();
$report->loadFile('../reports/Christmas.mrt');
$viewer->report = $report;

// In <head>:  $viewer->javascript->renderHtml();
// In <body>:  $viewer->renderHtml();

How it works. Splitting the component into script and body lets the dashboard viewer sit inside any custom page layout.