<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<project name="Slider ${project.version}">
<!--

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-stylus-skin</artifactId>
    <version>1.2</version>
  </skin>



  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.3.0</version>
  </skin>

-->
  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-application-skin</artifactId>
    <version>1.0</version>
  </skin>

  <custom>
    <fluidoSkin>
      <topBarEnabled>true</topBarEnabled>
      <sideBarEnabled>false</sideBarEnabled>
    </fluidoSkin>
  </custom>

  <version position="right"/>

  <body>
    <menu ref="reports"/>

    <menu name="Documents">
      <item name="Getting Started" href="/getting_started.html"/>
      <item name="manpage" href="/manpage.html"/>
      <item name="Troubleshooting" href="/troubleshooting.html"/>
      <item name="Architecture" href="/architecture/index.html"/>
      <item name="Developing" href="/developing/index.html"/>
      <item name="Exitcodes" href="/exitcodes.html"/>
    </menu>
  </body>
</project>
