diff --git a/www/data/css/styles.css b/www/data/css/styles.css
index de83522..7ea6eff 100644
--- a/www/data/css/styles.css
+++ b/www/data/css/styles.css
@@ -188,6 +188,56 @@ body {
.stripedtable tbody tr:nth-child(odd) {
background-color: #ccc; }
+.imgcarousel_parent {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ justify-content: center;
+ padding: 5px;
+ background: #BBB; }
+
+.imgcarousel_content {
+ background-size: contain;
+ background-position: center;
+ background-repeat: no-repeat;
+ height: 100%;
+ width: 100%; }
+
+.imgcarousel_prev, .imgcarousel_next {
+ display: flex;
+ flex-direction: column;
+ justify-content: center; }
+
+.imgcarousel_prev {
+ margin-right: 5px; }
+
+.imgcarousel_next {
+ margin-left: 5px; }
+
+.imgcarousel_prev svg {
+ width: 48px;
+ height: 48px;
+ border: 1px solid black;
+ background: #333;
+ fill: #DDD; }
+
+.imgcarousel_next svg {
+ width: 48px;
+ height: 48px;
+ border: 1px solid black;
+ background: #333;
+ fill: #DDD; }
+
+.imgcarousel_prev:hover svg {
+ background: #000;
+ fill: #FFF;
+ cursor: pointer; }
+
+.imgcarousel_next:hover svg {
+ background: #000;
+ fill: #FFF;
+ cursor: pointer; }
+
/* 400px */
#headerdiv {
z-index: 999;
@@ -363,6 +413,177 @@ html, body {
.index_pnl_base {
width: 330px; } }
/* 400px */
+.aboutcontent {
+ display: block;
+ width: 100%; }
+
+.aboutcontent .boxedcontent {
+ margin-bottom: 20px; }
+
+.about_egh_container {
+ display: flex;
+ flex-direction: column;
+ align-items: center; }
+
+.git_list {
+ display: inline-block;
+ width: 715px;
+ height: 115px;
+ overflow: visible; }
+
+@media (max-width: 991px) {
+ .git_list {
+ width: 100%;
+ height: auto; }
+
+ .extGitGraphContainer {
+ width: 95%;
+ width: calc(100% - 16px); } }
+.git_list text.caption {
+ font-size: 10px;
+ fill: #666; }
+
+.git_list text.caption_month {
+ font-size: 8px;
+ fill: #BBB; }
+
+.git_list text.caption_day {
+ font-size: 8px;
+ fill: #BBB; }
+
+.svg-tip:after {
+ box-sizing: border-box;
+ position: absolute;
+ left: 50%;
+ height: 5px;
+ width: 5px;
+ bottom: -10px;
+ margin: 0 0 0px -5px;
+ content: " ";
+ border: 5px solid transparent;
+ border-top-color: rgba(0, 0, 0, 0.8);
+ -moz-border-top-colors: none;
+ -moz-border-right-colors: none;
+ -moz-border-bottom-colors: none;
+ -moz-border-left-colors: none;
+ border-image: none; }
+
+.svg-tip {
+ padding: 5px;
+ background: none repeat scroll 0 0 rgba(0, 0, 0, 0.8);
+ color: #BBB;
+ font-size: 12px;
+ position: absolute;
+ z-index: 99999;
+ text-align: center;
+ border-radius: 3px;
+ box-sizing: border-box;
+ opacity: 0; }
+
+.extGitGraphContainer {
+ background-color: #FCFCFC;
+ margin: 10px;
+ display: inline-block;
+ border: 1px solid #222;
+ border-radius: 0;
+ box-shadow: 0 0 1px rgba(0, 0, 0, 0.25) inset; }
+
+.egg_footer {
+ margin-top: 5px;
+ text-align: right;
+ margin-right: 5px;
+ margin-bottom: 5px;
+ color: #888; }
+
+.egg_footer > a {
+ text-decoration: none;
+ color: inherit; }
+
+.egg_footer > a:hover {
+ text-decoration: none;
+ color: #22F; }
+
+.about_circles {
+ display: flex;
+ flex-direction: column; }
+
+.about_circles a {
+ margin: 5px 0; }
+.about_circles .iconbutton_light span {
+ text-align: left; }
+
+/* 400px */
+.admincontent {
+ display: block;
+ width: 100%; }
+
+.admincontent .boxedcontent {
+ margin-bottom: 20px; }
+
+.egh_ajaxOutput {
+ display: flex;
+ box-sizing: border-box;
+ width: 100%;
+ align-self: center;
+ justify-self: center;
+ margin-left: auto;
+ margin-right: auto;
+ resize: none;
+ height: 300px; }
+
+.keyvaluelist {
+ display: flex;
+ flex-direction: column; }
+ .keyvaluelist div {
+ display: flex;
+ flex-direction: row; }
+ .keyvaluelist div span {
+ align-self: center; }
+ .keyvaluelist div span:first-child {
+ font-weight: bold;
+ min-width: 500px; }
+
+.kvl_100 div span:first-child {
+ min-width: 100px; }
+
+.kvl_200 div span:first-child {
+ min-width: 200px; }
+
+.kvl_300 div span:first-child {
+ min-width: 300px; }
+
+.consistency_result_ok, .consistency_result_warn, .consistency_result_err {
+ min-width: 400px;
+ border: 1px solid #888;
+ padding: 0 5px;
+ margin: 1px 0; }
+
+.consistency_result_ok {
+ background: #0F0; }
+
+.consistency_result_warn {
+ background: #FF0; }
+
+.consistency_result_err {
+ background: #F00; }
+
+/* 400px */
+#loginform div {
+ display: flex;
+ flex-direction: column; }
+
+#loginform div button {
+ margin: 10px 0;
+ padding: 0; }
+
+.loginerror {
+ display: flex;
+ background: #FF4444;
+ font-weight: bold;
+ padding: 0 5px;
+ margin: 5px 0 20px 0; }
+
+/* 400px */
.bloglistelem_container {
display: flex;
align-items: center;
@@ -665,28 +886,6 @@ html, body {
.bce_pag05 {
flex-direction: row; } }
/* 400px */
-.ev_master {
- align-self: center; }
- @media (min-width: 851px) {
- .ev_master {
- padding-bottom: 80px; } }
- .ev_master .ev_code {
- color: #000;
- text-align: center;
- font-size: 150pt;
- font-weight: 500;
- font-family: Consolas, Monaco, "Courier New", Menlo, monospace; }
- .ev_master .ev_msg {
- color: #888;
- text-align: center;
- font-size: 25pt; }
- @media (max-width: 767px) {
- .ev_master .ev_code {
- font-size: 75pt; }
- .ev_master .ev_msg {
- font-size: 15pt; } }
-
-/* 400px */
.prgl_parent {
display: flex;
flex-direction: column; }
@@ -1007,175 +1206,154 @@ html, body {
.booklst_title {
font-size: 32pt; } }
/* 400px */
-.aboutcontent {
- display: block;
- width: 100%; }
-
-.aboutcontent .boxedcontent {
- margin-bottom: 20px; }
-
-.about_egh_container {
+.bookv_content {
display: flex;
flex-direction: column;
- align-items: center; }
+ color: #333;
+ border: 1px solid black;
+ background-color: #E0E0E0;
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto; }
-.git_list {
- display: inline-block;
- width: 715px;
- height: 115px;
- overflow: visible; }
+#bookv_header h1 {
+ font-size: 48pt;
+ text-align: center;
+ margin-top: 5px; }
+
+#bookv_header hr {
+ background: -moz-radial-gradient(circle, #CCC, #FFFFFF00);
+ background: -webkit-radial-gradient(circle, #CCC 0%, #FFFFFF00 100%); }
+
+.bookv_top {
+ display: flex;
+ flex-direction: row;
+ margin-top: 15px;
+ padding-bottom: 10px; }
+
+.bookv_left {
+ display: inline-flex;
+ justify-content: center;
+ flex-grow: 1;
+ margin-left: 10px;
+ margin-top: auto;
+ margin-bottom: auto; }
+
+.bookv_left img {
+ max-height: 100%;
+ max-width: 100%; }
+
+.bookv_right {
+ background: #BBB;
+ border: 1px solid #666;
+ margin: 0 10px;
+ padding: 8px 5px 2px 5px;
+ min-height: 250px;
+ min-width: 200px;
+ display: grid;
+ grid-template-columns: auto 1fr;
+ grid-template-rows: auto auto auto auto auto auto 1fr auto;
+ grid-column-gap: 15px;
+ grid-row-gap: 2px; }
+
+.bookv_right_key {
+ font-weight: bold; }
+
+.bookv_right_value a {
+ color: #333;
+ text-decoration: none; }
+
+.bookv_right_value a:hover {
+ color: #339;
+ text-decoration: none; }
+
+.bookv_right_comb {
+ grid-column: 1 / span 2; }
+
+.bookv_right_lang {
+ display: flex;
+ justify-content: right; }
+
+.bookv_dl_download {
+ background: #442222; }
+
+.bookv_dl_github {
+ background: #4078C0; }
+
+.bookv_right_lang img {
+ display: inline;
+ height: 16pt;
+ max-width: 32px;
+ margin: 1px 2px 0 2px; }
+
+.bookv_center {
+ margin: 0 8px 8px 8px;
+ padding: 16px;
+ background: #EEE;
+ border: 1px solid rgba(0, 0, 0, 0.15); }
+
+.bookv_sep {
+ margin: 40px 0 40px 0;
+ display: block;
+ border: none;
+ color: white;
+ height: 1px;
+ background: #666666FF;
+ background: -moz-radial-gradient(circle, #666, #FFFFFF00);
+ background: -webkit-radial-gradient(circle, #666 0%, #FFFFFF00 100%); }
@media (max-width: 991px) {
- .git_list {
- width: 100%;
- height: auto; }
+ .bookv_content {
+ border: none; }
- .extGitGraphContainer {
- width: 95%;
- width: calc(100% - 16px); } }
-.git_list text.caption {
- font-size: 10px;
- fill: #666; }
+ #bookv_header h1 {
+ font-size: 28pt; } }
+@media (max-width: 1199px) {
+ #bookv_header h1 {
+ font-size: 28pt; } }
+@media (max-width: 767px) {
+ .bookv_top {
+ flex-direction: column;
+ margin-top: 0; }
-.git_list text.caption_month {
- font-size: 8px;
- fill: #BBB; }
+ .bookv_left {
+ margin: 0 10px 10px 10px; }
-.git_list text.caption_day {
- font-size: 8px;
- fill: #BBB; }
+ .bookv_right {
+ min-height: 0;
+ min-width: 0; }
-.svg-tip:after {
- box-sizing: border-box;
- position: absolute;
- left: 50%;
- height: 5px;
- width: 5px;
- bottom: -10px;
- margin: 0 0 0px -5px;
- content: " ";
- border: 5px solid transparent;
- border-top-color: rgba(0, 0, 0, 0.8);
- -moz-border-top-colors: none;
- -moz-border-right-colors: none;
- -moz-border-bottom-colors: none;
- -moz-border-left-colors: none;
- border-image: none; }
+ .bookv_right_lang {
+ justify-content: space-evenly; }
-.svg-tip {
- padding: 5px;
- background: none repeat scroll 0 0 rgba(0, 0, 0, 0.8);
- color: #BBB;
- font-size: 12px;
- position: absolute;
- z-index: 99999;
- text-align: center;
- border-radius: 3px;
- box-sizing: border-box;
- opacity: 0; }
-
-.extGitGraphContainer {
- background-color: #FCFCFC;
- margin: 10px;
- display: inline-block;
- border: 1px solid #222;
- border-radius: 0;
- box-shadow: 0 0 1px rgba(0, 0, 0, 0.25) inset; }
-
-.egg_footer {
- margin-top: 5px;
- text-align: right;
- margin-right: 5px;
- margin-bottom: 5px;
- color: #888; }
-
-.egg_footer > a {
- text-decoration: none;
- color: inherit; }
-
-.egg_footer > a:hover {
- text-decoration: none;
- color: #22F; }
-
-.about_circles {
- display: flex;
- flex-direction: column; }
-
-.about_circles a {
- margin: 5px 0; }
-.about_circles .iconbutton_light span {
- text-align: left; }
+ #bookv_header h1 {
+ font-size: 18pt; } }
+.bookv_extra {
+ height: 500px;
+ border: 1px solid #333;
+ margin: 10px; }
/* 400px */
-.admincontent {
- display: block;
- width: 100%; }
-
-.admincontent .boxedcontent {
- margin-bottom: 20px; }
-
-.egh_ajaxOutput {
- display: flex;
- box-sizing: border-box;
- width: 100%;
- align-self: center;
- justify-self: center;
- margin-left: auto;
- margin-right: auto;
- resize: none;
- height: 300px; }
-
-.keyvaluelist {
- display: flex;
- flex-direction: column; }
- .keyvaluelist div {
- display: flex;
- flex-direction: row; }
- .keyvaluelist div span {
- align-self: center; }
- .keyvaluelist div span:first-child {
- font-weight: bold;
- min-width: 500px; }
-
-.kvl_100 div span:first-child {
- min-width: 100px; }
-
-.kvl_200 div span:first-child {
- min-width: 200px; }
-
-.kvl_300 div span:first-child {
- min-width: 300px; }
-
-.consistency_result_ok, .consistency_result_warn, .consistency_result_err {
- min-width: 400px;
- border: 1px solid #888;
- padding: 0 5px;
- margin: 1px 0; }
-
-.consistency_result_ok {
- background: #0F0; }
-
-.consistency_result_warn {
- background: #FF0; }
-
-.consistency_result_err {
- background: #F00; }
-
-/* 400px */
-#loginform div {
- display: flex;
- flex-direction: column; }
-
-#loginform div button {
- margin: 10px 0;
- padding: 0; }
-
-.loginerror {
- display: flex;
- background: #FF4444;
- font-weight: bold;
- padding: 0 5px;
- margin: 5px 0 20px 0; }
+.ev_master {
+ align-self: center; }
+ @media (min-width: 851px) {
+ .ev_master {
+ padding-bottom: 80px; } }
+ .ev_master .ev_code {
+ color: #000;
+ text-align: center;
+ font-size: 150pt;
+ font-weight: 500;
+ font-family: Consolas, Monaco, "Courier New", Menlo, monospace; }
+ .ev_master .ev_msg {
+ color: #888;
+ text-align: center;
+ font-size: 25pt; }
+ @media (max-width: 767px) {
+ .ev_master .ev_code {
+ font-size: 75pt; }
+ .ev_master .ev_msg {
+ font-size: 15pt; } }
/* 400px */
.euler_pnl_row {
diff --git a/www/data/css/styles.min.css b/www/data/css/styles.min.css
index 615dd43..06c9383 100644
--- a/www/data/css/styles.min.css
+++ b/www/data/css/styles.min.css
@@ -41,6 +41,15 @@ body{background-color:#EEE;color:#CCC;font-family:serif}
.stripedtable tbody td:first-child{border-left:0}
.stripedtable tbody tr:last-child td{border-bottom:0}
.stripedtable tbody tr:nth-child(odd){background-color:#ccc}
+.imgcarousel_parent{display:flex;flex-direction:row;align-content:center;justify-content:center;padding:5px;background:#BBB}
+.imgcarousel_content{background-size:contain;background-position:center;background-repeat:no-repeat;height:100%;width:100%}
+.imgcarousel_prev,.imgcarousel_next{display:flex;flex-direction:column;justify-content:center}
+.imgcarousel_prev{margin-right:5px}
+.imgcarousel_next{margin-left:5px}
+.imgcarousel_prev svg{width:48px;height:48px;border:1px solid black;background:#333;fill:#DDD}
+.imgcarousel_next svg{width:48px;height:48px;border:1px solid black;background:#333;fill:#DDD}
+.imgcarousel_prev:hover svg{background:#000;fill:#FFF;cursor:pointer}
+.imgcarousel_next:hover svg{background:#000;fill:#FFF;cursor:pointer}
#headerdiv{z-index:999;background-color:#333;display:flex;border-bottom:1px solid #111;box-shadow:0 0 8px #000;position:fixed;width:100%}
#headerdiv .logowrapper{flex:initial;margin:0;padding:0;height:42px}
#headerdiv .logowrapper a{cursor:default}
@@ -80,6 +89,43 @@ html,body{margin:0;padding:0;height:100%}
.index_pnl_header a:hover{text-decoration:underline}
.index_pnl_content{display:flex;flex-direction:column;background:#DDD;padding:6px}
@media(max-width:850px){.index_pnl_base{width:330px}}
+.aboutcontent{display:block;width:100%}
+.aboutcontent .boxedcontent{margin-bottom:20px}
+.about_egh_container{display:flex;flex-direction:column;align-items:center}
+.git_list{display:inline-block;width:715px;height:115px;overflow:visible}
+@media(max-width:991px){
+ .git_list{width:100%;height:auto}
+ .extGitGraphContainer{width:95%;width:calc(100% - 16px)}
+}
+.git_list text.caption{font-size:10px;fill:#666}
+.git_list text.caption_month{font-size:8px;fill:#BBB}
+.git_list text.caption_day{font-size:8px;fill:#BBB}
+.svg-tip:after{box-sizing:border-box;position:absolute;left:50%;height:5px;width:5px;bottom:-10px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,0.8);-moz-border-top-colors:none;-moz-border-right-colors:none;-moz-border-bottom-colors:none;-moz-border-left-colors:none;border-image:none}
+.svg-tip{padding:5px;background:none repeat scroll 0 0 rgba(0,0,0,0.8);color:#BBB;font-size:12px;position:absolute;z-index:99999;text-align:center;border-radius:3px;box-sizing:border-box;opacity:0}
+.extGitGraphContainer{background-color:#fcfcfc;margin:10px;display:inline-block;border:1px solid #222;border-radius:0;box-shadow:0 0 1px rgba(0,0,0,0.25) inset}
+.egg_footer{margin-top:5px;text-align:right;margin-right:5px;margin-bottom:5px;color:#888}
+.egg_footer>a{text-decoration:none;color:inherit}
+.egg_footer>a:hover{text-decoration:none;color:#22F}
+.about_circles{display:flex;flex-direction:column}
+.about_circles a{margin:5px 0}
+.about_circles .iconbutton_light span{text-align:left}
+.admincontent{display:block;width:100%}
+.admincontent .boxedcontent{margin-bottom:20px}
+.egh_ajaxOutput{display:flex;box-sizing:border-box;width:100%;align-self:center;justify-self:center;margin-left:auto;margin-right:auto;resize:none;height:300px}
+.keyvaluelist{display:flex;flex-direction:column}
+.keyvaluelist div{display:flex;flex-direction:row}
+.keyvaluelist div span{align-self:center}
+.keyvaluelist div span:first-child{font-weight:bold;min-width:500px}
+.kvl_100 div span:first-child{min-width:100px}
+.kvl_200 div span:first-child{min-width:200px}
+.kvl_300 div span:first-child{min-width:300px}
+.consistency_result_ok,.consistency_result_warn,.consistency_result_err{min-width:400px;border:1px solid #888;padding:0 5px;margin:1px 0}
+.consistency_result_ok{background:#0F0}
+.consistency_result_warn{background:#FF0}
+.consistency_result_err{background:#F00}
+#loginform div{display:flex;flex-direction:column}
+#loginform div button{margin:10px 0;padding:0}
+.loginerror{display:flex;background:#f44;font-weight:bold;padding:0 5px;margin:5px 0 20px 0}
.bloglistelem_container{display:flex;align-items:center;flex-direction:column}
.bloglistelem{width:100%;border:solid 1px #444;margin:10px 5px;color:#333;text-decoration:none}
.ble_blog{background-color:#BBB}
@@ -171,14 +217,6 @@ html,body{margin:0;padding:0;height:100%}
.bce_pag10{flex-direction:row}
.bce_pag05{flex-direction:row}
}
-.ev_master{align-self:center}
-@media(min-width:851px){.ev_master{padding-bottom:80px}}
-.ev_master .ev_code{color:#000;text-align:center;font-size:150pt;font-weight:500;font-family:Consolas,Monaco,"Courier New",Menlo,monospace}
-.ev_master .ev_msg{color:#888;text-align:center;font-size:25pt}
-@media(max-width:767px){
- .ev_master .ev_code{font-size:75pt}
- .ev_master .ev_msg{font-size:15pt}
-}
.prgl_parent{display:flex;flex-direction:column}
@media(max-width:850px){.prgl_parent{align-items:center}}
.prgl_elem{display:flex;flex-direction:row;text-decoration:none;background:#BBB;border:solid 1px #444;margin:5px 0}
@@ -257,43 +295,44 @@ html,body{margin:0;padding:0;height:100%}
.booklst_date{display:none;visibility:hidden}
.booklst_title{font-size:32pt}
}
-.aboutcontent{display:block;width:100%}
-.aboutcontent .boxedcontent{margin-bottom:20px}
-.about_egh_container{display:flex;flex-direction:column;align-items:center}
-.git_list{display:inline-block;width:715px;height:115px;overflow:visible}
+.bookv_content{display:flex;flex-direction:column;color:#333;border:1px solid black;background-color:#e0e0e0;width:100%;margin-left:auto;margin-right:auto}
+#bookv_header h1{font-size:48pt;text-align:center;margin-top:5px}
+#bookv_header hr{background:-moz-radial-gradient(circle,#CCC,#FFFFFF00);background:-webkit-radial-gradient(circle,#CCC 0,#FFFFFF00 100%)}
+.bookv_top{display:flex;flex-direction:row;margin-top:15px;padding-bottom:10px}
+.bookv_left{display:inline-flex;justify-content:center;flex-grow:1;margin-left:10px;margin-top:auto;margin-bottom:auto}
+.bookv_left img{max-height:100%;max-width:100%}
+.bookv_right{background:#BBB;border:1px solid #666;margin:0 10px;padding:8px 5px 2px 5px;min-height:250px;min-width:200px;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto auto auto auto auto 1fr auto;grid-column-gap:15px;grid-row-gap:2px}
+.bookv_right_key{font-weight:bold}
+.bookv_right_value a{color:#333;text-decoration:none}
+.bookv_right_value a:hover{color:#339;text-decoration:none}
+.bookv_right_comb{grid-column:1 / span 2}
+.bookv_right_lang{display:flex;justify-content:right}
+.bookv_dl_download{background:#422}
+.bookv_dl_github{background:#4078c0}
+.bookv_right_lang img{display:inline;height:16pt;max-width:32px;margin:1px 2px 0 2px}
+.bookv_center{margin:0 8px 8px 8px;padding:16px;background:#EEE;border:1px solid rgba(0,0,0,0.15)}
+.bookv_sep{margin:40px 0 40px 0;display:block;border:0;color:white;height:1px;background:#666666FF;background:-moz-radial-gradient(circle,#666,#FFFFFF00);background:-webkit-radial-gradient(circle,#666 0,#FFFFFF00 100%)}
@media(max-width:991px){
- .git_list{width:100%;height:auto}
- .extGitGraphContainer{width:95%;width:calc(100% - 16px)}
+ .bookv_content{border:0}
+ #bookv_header h1{font-size:28pt}
+}
+@media(max-width:1199px){#bookv_header h1{font-size:28pt}}
+@media(max-width:767px){
+ .bookv_top{flex-direction:column;margin-top:0}
+ .bookv_left{margin:0 10px 10px 10px}
+ .bookv_right{min-height:0;min-width:0}
+ .bookv_right_lang{justify-content:space-evenly}
+ #bookv_header h1{font-size:18pt}
+}
+.bookv_extra{height:500px;border:1px solid #333;margin:10px}
+.ev_master{align-self:center}
+@media(min-width:851px){.ev_master{padding-bottom:80px}}
+.ev_master .ev_code{color:#000;text-align:center;font-size:150pt;font-weight:500;font-family:Consolas,Monaco,"Courier New",Menlo,monospace}
+.ev_master .ev_msg{color:#888;text-align:center;font-size:25pt}
+@media(max-width:767px){
+ .ev_master .ev_code{font-size:75pt}
+ .ev_master .ev_msg{font-size:15pt}
}
-.git_list text.caption{font-size:10px;fill:#666}
-.git_list text.caption_month{font-size:8px;fill:#BBB}
-.git_list text.caption_day{font-size:8px;fill:#BBB}
-.svg-tip:after{box-sizing:border-box;position:absolute;left:50%;height:5px;width:5px;bottom:-10px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,0.8);-moz-border-top-colors:none;-moz-border-right-colors:none;-moz-border-bottom-colors:none;-moz-border-left-colors:none;border-image:none}
-.svg-tip{padding:5px;background:none repeat scroll 0 0 rgba(0,0,0,0.8);color:#BBB;font-size:12px;position:absolute;z-index:99999;text-align:center;border-radius:3px;box-sizing:border-box;opacity:0}
-.extGitGraphContainer{background-color:#fcfcfc;margin:10px;display:inline-block;border:1px solid #222;border-radius:0;box-shadow:0 0 1px rgba(0,0,0,0.25) inset}
-.egg_footer{margin-top:5px;text-align:right;margin-right:5px;margin-bottom:5px;color:#888}
-.egg_footer>a{text-decoration:none;color:inherit}
-.egg_footer>a:hover{text-decoration:none;color:#22F}
-.about_circles{display:flex;flex-direction:column}
-.about_circles a{margin:5px 0}
-.about_circles .iconbutton_light span{text-align:left}
-.admincontent{display:block;width:100%}
-.admincontent .boxedcontent{margin-bottom:20px}
-.egh_ajaxOutput{display:flex;box-sizing:border-box;width:100%;align-self:center;justify-self:center;margin-left:auto;margin-right:auto;resize:none;height:300px}
-.keyvaluelist{display:flex;flex-direction:column}
-.keyvaluelist div{display:flex;flex-direction:row}
-.keyvaluelist div span{align-self:center}
-.keyvaluelist div span:first-child{font-weight:bold;min-width:500px}
-.kvl_100 div span:first-child{min-width:100px}
-.kvl_200 div span:first-child{min-width:200px}
-.kvl_300 div span:first-child{min-width:300px}
-.consistency_result_ok,.consistency_result_warn,.consistency_result_err{min-width:400px;border:1px solid #888;padding:0 5px;margin:1px 0}
-.consistency_result_ok{background:#0F0}
-.consistency_result_warn{background:#FF0}
-.consistency_result_err{background:#F00}
-#loginform div{display:flex;flex-direction:column}
-#loginform div button{margin:10px 0;padding:0}
-.loginerror{display:flex;background:#f44;font-weight:bold;padding:0 5px;margin:5px 0 20px 0}
.euler_pnl_row{display:flex;flex-direction:row;flex-wrap:wrap}
@media(max-width:850px){.euler_pnl_row{flex-direction:column}}
.euler_pnl_row2{display:flex;flex-direction:row}
diff --git a/www/data/css/styles.scss b/www/data/css/styles.scss
index e3894b1..0b7df2a 100644
--- a/www/data/css/styles.scss
+++ b/www/data/css/styles.scss
@@ -3,20 +3,26 @@
@import 'styles_footer';
@import 'styles_main';
-@import 'styles_bloglist';
-@import 'styles_blogview';
-@import 'styles_blogview_euler';
-@import 'styles_errorview';
-@import 'styles_programslist';
-@import 'styles_programsview';
-@import 'styles_bookslist';
@import 'styles_about';
@import 'styles_admin';
@import 'styles_login';
+@import 'styles_bloglist';
+@import 'styles_blogview';
+@import 'styles_blogview_euler';
+
+@import 'styles_programslist';
+@import 'styles_programsview';
+
+@import 'styles_bookslist';
+@import 'styles_booksview';
+
+@import 'styles_errorview';
+
@import 'styles_eulerpanel';
@import 'styles_programspanel';
@import 'styles_blogpanel';
@import 'styles_bookspanel';
+
@import 'styles_bfjoustrunner';
@import 'styles_befungerunner';
\ No newline at end of file
diff --git a/www/data/css/styles_booksview.scss b/www/data/css/styles_booksview.scss
new file mode 100644
index 0000000..fe6f213
--- /dev/null
+++ b/www/data/css/styles_booksview.scss
@@ -0,0 +1,158 @@
+@import 'styles_config';
+
+.bookv_content {
+ display: flex;
+ flex-direction: column;
+
+ color: $COL_TEXT_DARK;
+ border: 1px solid black;
+ background-color: #E0E0E0;
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+#bookv_header h1 {
+ font-size: 48pt;
+ text-align: center;
+ margin-top: 5px;
+}
+
+#bookv_header hr {
+ background: -moz-radial-gradient( circle, $COL_TEXT_NORMAL, $COL_TRANSPARENT);
+ background: -webkit-radial-gradient(circle, $COL_TEXT_NORMAL 0%,$COL_TRANSPARENT 100%);
+}
+
+.bookv_top {
+ display: flex;
+ flex-direction: row;
+ margin-top: 15px;
+ padding-bottom: 10px;
+}
+
+.bookv_left {
+ display: inline-flex;
+ justify-content: center;
+
+ flex-grow: 1;
+ margin-left: 10px;
+
+ margin-top: auto;
+ margin-bottom: auto;
+}
+
+.bookv_left img {
+ max-height: 100%;
+ max-width: 100%;
+}
+
+.bookv_right {
+ background: #BBB;
+ border: 1px solid #666;
+ margin: 0 10px;
+ padding: 8px 5px 2px 5px;
+
+ min-height: 250px;
+ min-width: 200px;
+
+ display: grid;
+ grid-template-columns: auto 1fr;
+ grid-template-rows: auto auto auto auto auto auto 1fr auto;
+ grid-column-gap: 15px;
+ grid-row-gap: 2px;
+}
+
+.bookv_right_key {
+ font-weight: bold;
+}
+
+.bookv_right_value a {
+ color: $COL_TEXT_DARK;
+ text-decoration: none;
+}
+
+.bookv_right_value a:hover {
+ color: #339;
+ text-decoration: none;
+}
+
+.bookv_right_comb {
+ grid-column: 1 / span 2;
+}
+
+.bookv_right_lang {
+ display: flex;
+ justify-content: right;
+}
+
+.bookv_dl_download { background: #442222; }
+.bookv_dl_github { background: $COL_GITHUB; }
+
+.bookv_right_lang img {
+ display: inline;
+ height: 16pt;
+ max-width: 32px;
+ margin: 1px 2px 0 2px;
+}
+
+.bookv_center {
+ margin: 0 8px 8px 8px;
+ padding: 16px;
+ background: #EEE;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+.bookv_sep {
+ margin: 40px 0 40px 0;
+ display: block;
+ border: none;
+ color: white;
+ height: 1px;
+ background: #666666FF;
+ background: -moz-radial-gradient( circle, #666, #FFFFFF00);
+ background: -webkit-radial-gradient(circle, #666 0%, #FFFFFF00 100%);
+}
+
+@include rdmedia_range(0,2) {
+ .bookv_content { border: none; }
+ #bookv_header h1 { font-size: 28pt; }
+}
+
+@include rdmedia_range(0,3) {
+ #bookv_header h1 { font-size: 28pt; }
+}
+
+@include rdmedia(0) {
+
+ .bookv_top {
+ flex-direction: column;
+ margin-top: 0;
+ }
+
+ .bookv_left {
+ margin: 0 10px 10px 10px;
+ }
+
+ .bookv_right {
+ min-height: 0;
+ min-width: 0;
+ }
+
+ .bookv_right_lang {
+ justify-content: space-evenly;
+ }
+
+ #bookv_header h1 {
+ font-size: 18pt;
+ }
+}
+
+.bookv_extra {
+ height: 500px;
+ border: 1px solid #333;
+ margin: 10px;
+}
+
+.bookv_extra img {
+
+}
\ No newline at end of file
diff --git a/www/data/css/styles_global.scss b/www/data/css/styles_global.scss
index ceaf7d1..e6221b8 100644
--- a/www/data/css/styles_global.scss
+++ b/www/data/css/styles_global.scss
@@ -229,4 +229,46 @@ body {
tbody tr:nth-child(odd) {
background-color: #ccc;
}
-}
\ No newline at end of file
+}
+
+.imgcarousel_parent {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ justify-content: center;
+
+ padding: 5px;
+
+ background: #BBB;
+}
+
+.imgcarousel_content {
+ background-size: contain;
+ background-position: center;
+ background-repeat: no-repeat;
+ height: 100%;
+ width: 100%;
+}
+
+
+.imgcarousel_prev, .imgcarousel_next
+{
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
+
+.imgcarousel_prev
+{
+ margin-right: 5px;
+}
+
+.imgcarousel_next
+{
+ margin-left: 5px;
+}
+
+.imgcarousel_prev svg { width: 48px; height: 48px; border: 1px solid black; background: #333; fill: #DDD; }
+.imgcarousel_next svg { width: 48px; height: 48px; border: 1px solid black; background: #333; fill: #DDD; }
+.imgcarousel_prev:hover svg { background: #000; fill: #FFF; cursor: pointer; }
+.imgcarousel_next:hover svg { background: #000; fill: #FFF; cursor: pointer; }
\ No newline at end of file
diff --git a/www/data/images/book_img/apgte1_front.png b/www/data/images/book_img/apgte1_front.png
new file mode 100644
index 0000000..95292d5
Binary files /dev/null and b/www/data/images/book_img/apgte1_front.png differ
diff --git a/www/data/images/book_img/apgte1_full.png b/www/data/images/book_img/apgte1_full.png
new file mode 100644
index 0000000..89be747
Binary files /dev/null and b/www/data/images/book_img/apgte1_full.png differ
diff --git a/www/data/images/book_img/apgte1_img1.jpg b/www/data/images/book_img/apgte1_img1.jpg
new file mode 100644
index 0000000..63793e9
Binary files /dev/null and b/www/data/images/book_img/apgte1_img1.jpg differ
diff --git a/www/data/images/book_img/apgte1_img2.jpg b/www/data/images/book_img/apgte1_img2.jpg
new file mode 100644
index 0000000..2090863
Binary files /dev/null and b/www/data/images/book_img/apgte1_img2.jpg differ
diff --git a/www/data/images/book_img/apgte1_img3.jpg b/www/data/images/book_img/apgte1_img3.jpg
new file mode 100644
index 0000000..c10fe2b
Binary files /dev/null and b/www/data/images/book_img/apgte1_img3.jpg differ
diff --git a/www/data/images/book_img/apgte1_img4.jpg b/www/data/images/book_img/apgte1_img4.jpg
new file mode 100644
index 0000000..20e2e1f
Binary files /dev/null and b/www/data/images/book_img/apgte1_img4.jpg differ
diff --git a/www/data/images/book_img/apgte_1_front.png b/www/data/images/book_img/apgte_1_front.png
deleted file mode 100644
index ee9be22..0000000
Binary files a/www/data/images/book_img/apgte_1_front.png and /dev/null differ
diff --git a/www/data/images/book_img/apgte_1_full.png b/www/data/images/book_img/apgte_1_full.png
deleted file mode 100644
index b4df82e..0000000
Binary files a/www/data/images/book_img/apgte_1_full.png and /dev/null differ
diff --git a/www/data/images/book_img/hpmor1_front.png b/www/data/images/book_img/hpmor1_front.png
new file mode 100644
index 0000000..0b0e397
Binary files /dev/null and b/www/data/images/book_img/hpmor1_front.png differ
diff --git a/www/data/images/book_img/hpmor1_full.png b/www/data/images/book_img/hpmor1_full.png
new file mode 100644
index 0000000..721ae25
Binary files /dev/null and b/www/data/images/book_img/hpmor1_full.png differ
diff --git a/www/data/images/book_img/hpmor1_img1.jpg b/www/data/images/book_img/hpmor1_img1.jpg
new file mode 100644
index 0000000..9b30c55
Binary files /dev/null and b/www/data/images/book_img/hpmor1_img1.jpg differ
diff --git a/www/data/images/book_img/hpmor1_img2.jpg b/www/data/images/book_img/hpmor1_img2.jpg
new file mode 100644
index 0000000..a97fdbe
Binary files /dev/null and b/www/data/images/book_img/hpmor1_img2.jpg differ
diff --git a/www/data/images/book_img/hpmor1_img3.jpg b/www/data/images/book_img/hpmor1_img3.jpg
new file mode 100644
index 0000000..6d1b2f8
Binary files /dev/null and b/www/data/images/book_img/hpmor1_img3.jpg differ
diff --git a/www/data/images/book_img/hpmor1_img4.jpg b/www/data/images/book_img/hpmor1_img4.jpg
new file mode 100644
index 0000000..19378c6
Binary files /dev/null and b/www/data/images/book_img/hpmor1_img4.jpg differ
diff --git a/www/data/images/book_img/hpmor2_front.png b/www/data/images/book_img/hpmor2_front.png
new file mode 100644
index 0000000..651e470
Binary files /dev/null and b/www/data/images/book_img/hpmor2_front.png differ
diff --git a/www/data/images/book_img/hpmor2_full.png b/www/data/images/book_img/hpmor2_full.png
new file mode 100644
index 0000000..855682c
Binary files /dev/null and b/www/data/images/book_img/hpmor2_full.png differ
diff --git a/www/data/images/book_img/hpmor2_img1.jpg b/www/data/images/book_img/hpmor2_img1.jpg
new file mode 100644
index 0000000..957af67
Binary files /dev/null and b/www/data/images/book_img/hpmor2_img1.jpg differ
diff --git a/www/data/images/book_img/hpmor2_img2.jpg b/www/data/images/book_img/hpmor2_img2.jpg
new file mode 100644
index 0000000..568a199
Binary files /dev/null and b/www/data/images/book_img/hpmor2_img2.jpg differ
diff --git a/www/data/images/book_img/hpmor2_img3.jpg b/www/data/images/book_img/hpmor2_img3.jpg
new file mode 100644
index 0000000..ab51742
Binary files /dev/null and b/www/data/images/book_img/hpmor2_img3.jpg differ
diff --git a/www/data/images/book_img/hpmor2_img4.jpg b/www/data/images/book_img/hpmor2_img4.jpg
new file mode 100644
index 0000000..407d951
Binary files /dev/null and b/www/data/images/book_img/hpmor2_img4.jpg differ
diff --git a/www/data/images/book_img/hpmor3_front.png b/www/data/images/book_img/hpmor3_front.png
new file mode 100644
index 0000000..298f430
Binary files /dev/null and b/www/data/images/book_img/hpmor3_front.png differ
diff --git a/www/data/images/book_img/hpmor3_full.png b/www/data/images/book_img/hpmor3_full.png
new file mode 100644
index 0000000..ca760ca
Binary files /dev/null and b/www/data/images/book_img/hpmor3_full.png differ
diff --git a/www/data/images/book_img/hpmor3_img1.jpg b/www/data/images/book_img/hpmor3_img1.jpg
new file mode 100644
index 0000000..99ed479
Binary files /dev/null and b/www/data/images/book_img/hpmor3_img1.jpg differ
diff --git a/www/data/images/book_img/hpmor3_img2.jpg b/www/data/images/book_img/hpmor3_img2.jpg
new file mode 100644
index 0000000..b88a47d
Binary files /dev/null and b/www/data/images/book_img/hpmor3_img2.jpg differ
diff --git a/www/data/images/book_img/hpmor3_img3.jpg b/www/data/images/book_img/hpmor3_img3.jpg
new file mode 100644
index 0000000..9ba22d5
Binary files /dev/null and b/www/data/images/book_img/hpmor3_img3.jpg differ
diff --git a/www/data/images/book_img/hpmor3_img4.jpg b/www/data/images/book_img/hpmor3_img4.jpg
new file mode 100644
index 0000000..1cc121c
Binary files /dev/null and b/www/data/images/book_img/hpmor3_img4.jpg differ
diff --git a/www/data/images/book_img/hpmor_1_front.png b/www/data/images/book_img/hpmor_1_front.png
deleted file mode 100644
index feb442c..0000000
Binary files a/www/data/images/book_img/hpmor_1_front.png and /dev/null differ
diff --git a/www/data/images/book_img/hpmor_1_full.png b/www/data/images/book_img/hpmor_1_full.png
deleted file mode 100644
index 979cc2a..0000000
Binary files a/www/data/images/book_img/hpmor_1_full.png and /dev/null differ
diff --git a/www/data/images/book_img/hpmor_2_front.png b/www/data/images/book_img/hpmor_2_front.png
deleted file mode 100644
index f2ce79e..0000000
Binary files a/www/data/images/book_img/hpmor_2_front.png and /dev/null differ
diff --git a/www/data/images/book_img/hpmor_2_full.png b/www/data/images/book_img/hpmor_2_full.png
deleted file mode 100644
index d89f44c..0000000
Binary files a/www/data/images/book_img/hpmor_2_full.png and /dev/null differ
diff --git a/www/data/images/book_img/hpmor_3_front.png b/www/data/images/book_img/hpmor_3_front.png
deleted file mode 100644
index 62cbd42..0000000
Binary files a/www/data/images/book_img/hpmor_3_front.png and /dev/null differ
diff --git a/www/data/images/book_img/hpmor_3_full.png b/www/data/images/book_img/hpmor_3_full.png
deleted file mode 100644
index 8477541..0000000
Binary files a/www/data/images/book_img/hpmor_3_full.png and /dev/null differ
diff --git a/www/data/images/book_img/mm_front.png b/www/data/images/book_img/mm_front.png
index c8d844e..f46bec1 100644
Binary files a/www/data/images/book_img/mm_front.png and b/www/data/images/book_img/mm_front.png differ
diff --git a/www/data/images/book_img/mm_full.png b/www/data/images/book_img/mm_full.png
index 359df7c..f4e0cd9 100644
Binary files a/www/data/images/book_img/mm_full.png and b/www/data/images/book_img/mm_full.png differ
diff --git a/www/data/images/book_img/mm_img1.jpg b/www/data/images/book_img/mm_img1.jpg
new file mode 100644
index 0000000..0224ac1
Binary files /dev/null and b/www/data/images/book_img/mm_img1.jpg differ
diff --git a/www/data/images/book_img/mm_img2.jpg b/www/data/images/book_img/mm_img2.jpg
new file mode 100644
index 0000000..c6ea4ec
Binary files /dev/null and b/www/data/images/book_img/mm_img2.jpg differ
diff --git a/www/data/images/book_img/mm_img3.jpg b/www/data/images/book_img/mm_img3.jpg
new file mode 100644
index 0000000..b566693
Binary files /dev/null and b/www/data/images/book_img/mm_img3.jpg differ
diff --git a/www/data/images/book_img/mm_img4.jpg b/www/data/images/book_img/mm_img4.jpg
new file mode 100644
index 0000000..e21a76e
Binary files /dev/null and b/www/data/images/book_img/mm_img4.jpg differ
diff --git a/www/data/images/icons.svg b/www/data/images/icons.svg
index b6c62f7..19da5da 100644
--- a/www/data/images/icons.svg
+++ b/www/data/images/icons.svg
@@ -13,4 +13,7 @@