// NOTE: Please use this file to perform modifications on default style sheets.
//
// You need to install a few Ruby gems to generate extra.css from this file:
// gem install less therubyracer
//
// Run this command to regenerate extra.css after you're finished with changes:
// lessc --compress extra.less > extra.css
//
// Alternatively you can use online services to regenerate extra.css.


// Default text color for page contents
@default-text-color: hsl(0,0%,30%);

// Page header, footer, table rows, inline codes and definition lists
@header-footer-background-color: hsl(0,0%,95%);

// Page header, footer links and navigation bar background
@header-footer-link-color: hsl(0,0%,40%);

// Doxygen navigation bar links
@navbar-link-color: @header-footer-background-color;

// Page content background color
@content-background-color: hsl(0,0%,100%);

// Bold, italic, h1, h2, ... and table of contents
@heading-color: hsl(0,0%,10%);

// Function, enum and macro definition separator
@def-separator-color: @header-footer-background-color;

// Base color hue
@base-hue: 24;

// Default color used for links
@default-link-color: hsl(@base-hue,100%,50%);

// Doxygen navigation bar active tab
@tab-text-color: hsl(0,0%,100%);
@tab-background-color1: @default-link-color;
@tab-background-color2: lighten(spin(@tab-background-color1, 10), 10%);

// Table borders
@default-border-color: @default-link-color;

// Table header
@table-text-color: @tab-text-color;
@table-background-color1: @tab-background-color1;
@table-background-color2: @tab-background-color2;

// Table of contents, data structure index and prototypes
@toc-background-color1: hsl(0,0%,90%);
@toc-background-color2: lighten(@toc-background-color1, 5%);

// Function prototype parameters color
@prototype-param-color: darken(@default-link-color, 25%);

// Message box color: note, pre, post and invariant
@box-note-color: hsl(103,80%,85%);

// Message box color: warning and attention
@box-warning-color: hsl(34,80%,85%);

// Message box color: deprecated and bug
@box-bug-color: hsl(333,80%,85%);

// Message box color: todo and test
@box-todo-color: hsl(200,80%,85%);

// Message box helper function
.message-box(@base-color) {
	background:linear-gradient(to bottom,lighten(@base-color, 5%) 0%,@base-color 100%);
	box-shadow:inset 0 0 32px darken(@base-color, 5%);
	color:darken(@base-color, 67%);
	border:2px solid desaturate(darken(@base-color, 10%), 20%);
}

.sm-dox,.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted,.sm-dox ul a:hover {
    background:none;
    text-shadow:none;
}

.sm-dox a span.sub-arrow {
	border-color:@navbar-link-color transparent transparent transparent;
}

.sm-dox a span.sub-arrow:active,.sm-dox a span.sub-arrow:focus,.sm-dox a span.sub-arrow:hover,.sm-dox a:hover span.sub-arrow {
	border-color:@default-link-color transparent transparent transparent;
}

.sm-dox ul a span.sub-arrow:active,.sm-dox ul a span.sub-arrow:focus,.sm-dox ul a span.sub-arrow:hover,.sm-dox ul a:hover span.sub-arrow {
	border-color:transparent transparent transparent @default-link-color;
}

.sm-dox ul a:hover {
    background:@header-footer-link-color;
    text-shadow:none;
}

.sm-dox ul.sm-nowrap a {
	color:@default-text-color;
    text-shadow:none;
}

#main-nav,#main-menu,#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li,.memdoc,dl.reflist dd,div.toc li,.ah,span.lineno,span.lineno a,span.lineno a:hover,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,.doxtable code,.markdownTable code {
	background:none;
}

#titlearea,.footer,.contents,div.header,.memdoc,table.doxtable td,table.doxtable th,table.markdownTable td,table.markdownTable th,hr,.memSeparator {
	border:none;
}

#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li,.reflist dt a.el,.levels span,.directory .levels span {
	text-shadow:none;
}

.memdoc,dl.reflist dd {
	box-shadow:none;
}

div.headertitle,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,table.doxtable code,table.markdownTable code {
	padding:0;
}

#nav-path,.directory .levels,span.lineno {
	display:none;
}

html,#titlearea,.footer,tr.even,.directory tr.even,.doxtable tr:nth-child(even),tr.markdownTableBody:nth-child(even),.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,code,.markdownTableRowEven {
	background:@header-footer-background-color;
}

body {
	color:@default-text-color;
}

h1,h2,h2.groupheader,h3,div.toc h3,h4,h5,h6,strong,em {
	color:@heading-color;
	border-bottom:none;
}

h1 {
  padding-top:0.5em;
  font-size:180%;
}

h2 {
  padding-top:0.5em;
  margin-bottom:0;
  font-size:140%;
}

h3 {
  padding-top:0.5em;
  margin-bottom:0;
  font-size:110%;
}

.glfwheader {
	font-size:16px;
	height:64px;
	max-width:920px;
	min-width:800px;
	padding:0 32px;
	margin:0 auto;
}

#glfwhome {
	line-height:64px;
	padding-right:48px;
	color:@header-footer-link-color;
	font-size:2.5em;
	background:url("https://www.glfw.org/css/arrow.png") no-repeat right;
}

.glfwnavbar {
	list-style-type:none;
	margin:0 auto;
	float:right;
}

#glfwhome,.glfwnavbar li {
	float:left;
}

.glfwnavbar a,.glfwnavbar a:visited {
	line-height:64px;
	margin-left:2em;
	display:block;
	color:@header-footer-link-color;
}

#glfwhome,.glfwnavbar a,.glfwnavbar a:visited {
	transition:.35s ease;
}

#titlearea,.footer {
	color:@header-footer-link-color;
}

address.footer {
	text-align:center;
	padding:2em;
	margin-top:3em;
}

#top {
	background:@header-footer-link-color;
}

#main-nav {
	max-width:960px;
	min-width:800px;
	margin:0 auto;
	font-size:13px;
}

#main-menu {
	max-width:920px;
	min-width:800px;
	margin:0 auto;
	font-size:13px;
}

.memtitle {
    display:none;
}

.memproto,.memname {
    font-weight:bold;
    text-shadow:none;
}

#main-menu {
	height:36px;
	display:block;
	position:relative;
}

#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li {
	color:@navbar-link-color;
}

#main-menu li ul.sm-nowrap li a {
	color:@default-text-color;
}

#main-menu li ul.sm-nowrap li a:hover {
	color:@default-link-color;
}

.contents {
	min-height:590px;
}

div.contents,div.header {
	max-width:920px;
	margin:0 auto;
	padding:0 32px;
	background:@content-background-color none;
}

table.doxtable th,table.markdownTable th,dl.reflist dt {
	background:linear-gradient(to bottom,@table-background-color2 0%,@table-background-color1 100%);
	box-shadow:inset 0 0 32px @table-background-color1;
	text-shadow:0 -1px 1px darken(@table-background-color1, 15%);
	text-align:left;
	color:@table-text-color;
}

dl.reflist dt a.el {
	color:@default-link-color;
	padding:.2em;
	border-radius:4px;
	background-color:lighten(@default-link-color, 40%);
}

div.toc {
	float:none;
	width:auto;
}

div.toc h3 {
	font-size:1.17em;
}

div.toc ul {
	padding-left:1.5em;
}

div.toc li {
	font-size:1em;
	padding-left:0;
	list-style-type:disc;
}

div.toc,.memproto,div.qindex,div.ah {
	background:linear-gradient(to bottom,@toc-background-color2 0%,@toc-background-color1 100%);
	box-shadow:inset 0 0 32px @toc-background-color1;
	text-shadow:0 1px 1px lighten(@toc-background-color2, 10%);
	color:@heading-color;
	border:2px solid @toc-background-color1;
	border-radius:4px;
}

.paramname {
	color:@prototype-param-color;
}

dl.reflist dt {
	border:2px solid @default-border-color;
	border-top-left-radius:4px;
	border-top-right-radius:4px;
	border-bottom:none;
}

dl.reflist dd {
	border:2px solid @default-border-color;
	border-bottom-right-radius:4px;
	border-bottom-left-radius:4px;
	border-top:none;
}

table.doxtable,table.markdownTable {
	border-collapse:inherit;
	border-spacing:0;
	border:2px solid @default-border-color;
	border-radius:4px;
}

a,a:hover,a:visited,a:visited:hover,.contents a:visited,.el,a.el:visited,#glfwhome:hover,#main-menu a:hover,span.lineno a:hover {
	color:@default-link-color;
	text-decoration:none;
}

div.directory {
	border-collapse:inherit;
	border-spacing:0;
	border:2px solid @default-border-color;
	border-radius:4px;
}

hr,.memSeparator {
	height:2px;
	background:linear-gradient(to right,@def-separator-color 0%,darken(@def-separator-color, 10%) 50%,@def-separator-color 100%);
}

dl.note,dl.pre,dl.post,dl.invariant {
	.message-box(@box-note-color);
}

dl.warning,dl.attention {
	.message-box(@box-warning-color);
}

dl.deprecated,dl.bug {
	.message-box(@box-bug-color);
}

dl.todo,dl.test {
	.message-box(@box-todo-color);
}

dl.note,dl.pre,dl.post,dl.invariant,dl.warning,dl.attention,dl.deprecated,dl.bug,dl.todo,dl.test {
	border-radius:4px;
	padding:1em;
	text-shadow:0 1px 1px hsl(0,0%,100%);
	margin:1em 0;
}

.note a,.pre a,.post a,.invariant a,.warning a,.attention a,.deprecated a,.bug a,.todo a,.test a,.note a:visited,.pre a:visited,.post a:visited,.invariant a:visited,.warning a:visited,.attention a:visited,.deprecated a:visited,.bug a:visited,.todo a:visited,.test a:visited {
	color:inherit;
}

div.line {
	line-height:inherit;
}

div.fragment,pre.fragment {
	background:hsl(0,0%,95%);
	border-radius:4px;
	border:none;
	padding:1em;
	overflow:auto;
	border-left:4px solid hsl(0,0%,80%);
	margin:1em 0;
}

.lineno a,.lineno a:visited,.line,pre.fragment {
	color:@default-text-color;
}

span.preprocessor,span.comment {
	color:hsl(193,100%,30%);
}

a.code,a.code:visited {
	color:hsl(18,100%,45%);
}

span.keyword,span.keywordtype,span.keywordflow {
	color:darken(@default-text-color, 5%);
	font-weight:bold;
}

span.stringliteral {
	color:hsl(261,100%,30%);
}

code {
	padding:.1em;
	border-radius:4px;
}
