/* */

* {
    margin:		0px;
    padding:		0px;
}

body {

}

#announces {
/*  border-top:		2px solid black; */
    border-bottom:	2px solid black;
    padding:		2.0em auto;
    font-size:		1.5em; 
}

#announces>div {
    margin:		0.7em auto;
}

#bigcontainer {
    padding-right:	4em;
}

div#pageheadline {
/*  position:		absolute;	*/
    top:		0px;
    left:		0px;
    height:		105px;
    padding:		2px;
/*  border:		1px solid red;	*/
/*  width:		805px;		*/
}

div.headline {
    moz-box-shadow:	10px 10px 5px #888;
    font-size:			22pt;
    text-align:		left;
    margin-left:		170px;
    padding:			0.5em;
    margin-top:		20px;
    margin-bottom:	20px;
    position:   		relative;
/*  width:		20em;		*/
    border:				1px solid blue; 
}

div.decoration {
    float:				left;
/*  
    width:	     	100px;
    background-color: 	lightblue; 
*/
}

div#pagecontents {
/*    position:	    	absolute;	*/
    margin-top:		1em;
    top:	    			105px;
    left:	    		0px;
/*  border:	    	1px solid green; */
/*  width:	    	804px;		 */
}

#pagecontents img {
     border:			1px solid black;
     padding:			1px;
}

div.navbar {
/*  width:	    	10em;		*/
    width:				160px;
    position:	    	relative;
    padding:	    	2px;
    font-family:		Arial,sans-serif;
    font-size:			0.8em;
/*  border:	    	1px dashed Navy; */
}

div.navleft {
    float:	    	left;
}

div.navright {
    float:	    	right;
}

div.staticmenu {
    margin-top:	   2px;
    margin-bottom:	1em;
/*  border:	    	1px solid blue; */
}

div.menuheader {
    border-top:		1px solid black;
    padding-top:	4px;
    padding-bottom:	4px;
    background-color: 	#eee;
}

span.navitem {
/*  font-size:	    	70%;		*/
    display:	    	block;
    margin:		0.5em;
}

span.navitem a {
    text-decoration:	none;
    padding:		2px;
}

span.navitem a:hover {
    background-color:	#eee;
    border:		1px solid #808080;
}

div#content {
    margin-top:	    	2px;
    font-size:		10pt;
    position:	    	relative;
    margin-left:    	162px;		
/*  margin-right:   	162px;		*/
/*  border:	    	1px solid red;  */
    text-align:	    	justify;
    padding:	    	0.5em;
/*  width:		60em;		*/
    font-family:	Arial,sans-serif;
/*  background-color:	#ffff99;	*/
}

#content p {
    margin:		0.8em auto;
}

#last_modified {
    border-top:		1px solid #ccc;
    font-size:		80%;
    padding:		5px;
    text-align:		right;
    margin-top:		2em;
}

.example-contents p {
    width:		90%;
}

.example-contents pre {
    margin:		auto 5% auto 5%;
}

.foto {
    float:  		left;
    margin-right:   	0.5em;
}

#intestazione {
    top:		0px;
    left:		103px;
/*  width:		604px;		*/
}

#intestazione img {
    top:	    	0px;
}

#footer .rightaligned {
    margin-right:	1em;
    text-align:		right;
    width:		50%;
    float:		right;
}

#footer .leftaligned {
    margin-left:	0.5em;
    text-align:		left;
    width:		40%;
    float:		left;
}

div#footer {
    margin-top:	    	0.3em;
    border:	    	1px dotted red;
    background-color: 	#cf9;
    height:	    	1.5em;
}

.contentheadline {
    text-align:	 	center;
    font-size:		150%;
    font-weight:	bold;
    border-bottom:	1px solid #ccc;
    margin-bottom:	1em;
}

ul {
    margin-top:	    	0.8em;
    margin-left:    	2em;
}

.clearfloats {
    clear:		both;
}

code {
    margin:		1em 2em;
    border:		1px dashed black;
    background-color:	#f0f0f0;
    padding:		0.2em;
}

pre.code {
    padding:		1ex;
}

blockquote {
    font-size:		smaller;
    font-style:		italic;
}

span.type {
    color:		#4682B4;
}

td {
    padding:		0.5em;
}

td.code {
    font-size: 		smaller;
    background-color:	black;
    border:		1em solid white;
    color:		white;
}

.programlisting {
    background:	    #ddd; 
    margin:	    2ex; 
    margin-right:   10%;       
    padding:	    1ex; 
    border:	    dashed black 1px ; 
    white-space:    pre;      
    font-family:    monospace; 
    font-size:	    90%;
}

span.variable-name {
	 color: #228b22;
} /* font-lock-variable-name-face */

span.comment {
	color: #ff7f24;
} /* font-lock-comment-face */

span.keyword {
	color: #00ffff;
} /* font-lock-keyword-face */

span.function-name {
	color: #87cefa;
} /* font-lock-function-name-face */

li {
    margin:	1em;
}
