/*
   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.
*/

/*Shows the value of the name attribute when hovered*/
/* Disabled
a[name]:hover:after{
    content: " #" attr(name);
    font-size: 90%;
    text-decoration: none;
}
*/

/*
 * Hide class="sectionlink", except when an enclosing heading
 * has the :hover property.
 * Used to hide the &para; marker for generating internal links
 */
.sectionlink {
  display: none;
}
:hover > .sectionlink {
  display: inline;
  /* Green so shows up on section headings too */
  color: rgb(0,255,0);
}
