/*

<!--

Sections and subsections:

h1/h2/h3/h4, just like in normal HTML

Lists:

ul/ol, just like in normal HTML

Use <ol class="lower-alpha"> for lettered lists

Preformatted code:

pre, just like in normal HTML

Notes:

<div class="note">...</div>
<div class="caution">...</div>
<div class="tip">...</div>

Figures:

<div class="figure" id="..."">
  <img alt="" src="..."/>
  <div>Caption in second div</div>
</div>

Tables:

<table id="...">
  <caption>Table caption</caption>
  <tbody>
    <tr>
      <th>...</th>
      <th>...</th>
      ...    
    </tr>
    <tr>
      <td>...</td>
      <td>...</td>
      ...    
    </tr>
    ...
  </tbody>
</table>

Literature list:

<div class="literature">
   <p id="...">First reference</p>
   <p id="...">Second reference</p>
   ...
</div>

Exercises:

<ol class="exercises">
   <li id="...">First exercise</li>
   <li>Second exercise</li>
   ...  
</ol>

References:

<a href="#..." class="tableref"/>
<a href="#..." class="h2ref"/>
<a href="#..." class="literatureref"/>

To do items:

<p class="todo">...</p>

Character styles:

kbd/.sc: Small caps
var: Variable or variable part of code, in italic
cite/.c: Comment inside code, in roman 
abbr/.gray: Grayed out
samp/.p: Pseudocode
acronym/.black: black-on-white
.url
.u: underline

To inline images: http://www.nczonline.net/blog/2009/11/03/automatic-data-uri-embedding-in-css-files/

-->

TODO: Big Java Styles

*/

body > p, body > ul, body > div { 
  margin-left: 1em;
}

div.margin {
    margin-left: 0em;
    font-family: sans-serif;
    font-size: 0.8em; 
    float: left;
    width: 10em;
    background-color: cornsilk;
    padding: 0.5em;
    margin-right: 1em;
    margin-bottom: 0.5em;
}

div.rightimg {
    float: right;
    width: 10em;
    font-family: sans-serif;
    font-style: italic;
    margin-left: 2em;
}

div.leftimg {
    float: left;
    width: 10em;
    font-family: sans-serif;
    font-style: italic;
    margin-right: 2em;
}

div.rightimg > img, div.leftimg > img {
    width: 90%;
}

@font-face {
  font-family: "MonoCondensed";
  src: local("DejaVu Sans Mono Condensed"), url("http://horstmann.com/MySlidy/DejaVuSansMonoCondensed.otf") format("opentype");
}

@font-face {
  font-family: "Handwriting";
  src: local("MarkingPen"), url("http://horstmann.com/MySlidy/Satisfy.ttf") format("truetype");
}

@media print { 
  h1 {
    page-break-before: always;
  }

  @font-face {
    font-family: "serif";
    src: local("FreeSerif")
  }

  @font-face {
    font-family: "sans-serif";
    src: local("DejaVu Sans")
  }

  .indexterm {
      display: none;
  }
}

h1, h2, h3, h4 {
    font-family: sans-serif;
}

pre, code, .code, .url { 
  font-family: "MonoCondensed", monospace
}

ul { 
  list-style-type: square;
}


.u, .url {
  text-decoration: underline; 
}

del, .ul {
  text-decoration: line-through;
}

body { 
  font-family:  serif
}

kbd, .sc { 
  font-family:  serif;
  font-variant: small-caps;
  text-transform: lowercase; 
  font-style: normal;
}

var {
  font-style: italic;
  font-family:  serif
}

var code, var .code { 
  font-style: normal;
}

samp, .hand, .pseudo, .p {
  font-style: normal;
  font-family: "Handwriting", "Comic Sans MS", serif
}

samp b, .hand b, .pseudo b, .p b, pre b, code b, samp strong, .hand strong, .pseudo strong, .p strong, pre strong, code strong {
  font-weight: normal;
  color: blue;
}

pre cite, code cite, pre .c, code .c, pre .rm, code .rm, pre .comment, code .comment {
  font-style: normal;
  font-family:  serif
}

abbr, .gray { 
  color: gray;
}

acronym, .black { 
  color: white;
  background: black;
}

pre { 
  margin-left: 1em;  
}

body > pre { 
  margin-left: 2em;  
}

.Note, .note, .Tip, .tip, .Caution, .caution, .q, .a { 
  background-repeat: no-repeat; 
  padding-left: 70px;
  min-height: 50px;
  margin-top: 0.5em;
  margin-bottom: 0.5em;
  padding-top: 0.2em;
  padding-bottom: 0.2em;
}

div.def {
  padding-top: 0.2em;
  padding-bottom: 0.2em;
  padding-left: 1.2em;
  padding-right: 1.2em;
  background-color: cornsilk;
}

div.theorem {
  padding-top: 0.2em;
  padding-bottom: 0.2em;
  padding-left: 1.2em;
  padding-right: 1.2em;
  background-color: lightsteelblue;
}

div.participation {
  padding-top: 0.2em;
  padding-bottom: 0.2em;
  padding-left: 1.2em;
  padding-right: 1.2em;
  background-color: #eee;
}

div.ex {
  padding-top: 0.2em;
  padding-bottom: 0.2em;
  padding-left: 1.2em;
  padding-right: 1.2em;
  background-color: #eeeeff;
}

div.ex:before {
    content: "Exercise: ";
    font-weight: bold;
}

div.participation > p:first-child:before {
    content: "Participation Exercise: ";
    font-weight: bold;
}

.q {
    background-color: #ffc5c5;
}

.a {
    background-color: #c5ffd9;
}

div.def > p:first-child:before {
  content: "Definition: ";
  font-weight: bold;
}

div.theorem > p:first-child:before {
  content: "Theorem: ";
  font-weight: bold;
}


div.Note > p:first-child:before, p.Note:before, div.note > p:first-child:before, p.note:before {
  content: "Note: ";
  font-weight: bold;
}

div.Tip > p:first-child:before, p.Tip:before, div.tip > p:first-child:before, p.tip:before {
  content: "Tip: ";
  font-weight: bold;
}

div.Caution > p:first-child:before, p.Caution:before, div.caution > p:first-child:before, p.caution:before { 
  content: "Caution: ";
  font-weight: bold;
}

table {
  border-collapse: collapse;
  border-style: solid;
  border-width: thin;
  margin-left: 2em;
  margin-right: 2em;  
  margin-bottom: 1em;
}

table caption { 
  margin-top: 1em;
  margin-left: 2em;
  margin-right: 2em;  
  margin-bottom: 0.5em;
}

table td {
  border-style: solid;
  border-width: thin;
  padding: 3pt;
}

table th {
  border-style: solid;
  border-width: thin;
  padding: 3pt;
}

.TBD:before, .todo:before { 
  color: red;
  content: "TODO: " ;
}

.TBD, .todo { 
  color: red;
}

table caption:before { 
  content: "Table " counter(h1) "-" counter(table) ": ";
}

table[id] { 
  counter-increment: table;
}

table caption { 
    text-align: left;
}

body { 
  counter-reset: table;
  counter-reset: figure;
  counter-reset: literature;
  counter-reset: exr;
  counter-reset: exe;
  counter-reset: exp;
  counter-reset: selfcheck;
  counter-reset: special;
  counter-reset: tip;
  counter-reset: error;
  counter-reset: howto;
  counter-reset: workedex;
  counter-reset: java8;
}

@media print { 
  a.tableref { 
    content: "Table " counter(h1) "-" target-counter(attr(href), table) ;
    text-decoration: none;
    color: black;
  }

  a.figureref { 
    content: "Figure " target-counter(attr(href), figure) ;
    text-decoration: none;
    color: black;
  }

  a.literatureref { 
    content: "[" target-counter(attr(href), literature) "]" ;
    text-decoration: none;
    color: black;
  }

 a.specialref { 
    content: "Special Topic" target-counter(attr(href), h1) "." target-counter(attr(href), special) ;
    text-decoration: none;
    color: black;
  }
  a.tipref { 
    content: "Programming Tip" target-counter(attr(href), h1) "." target-counter(attr(href), tip) ;
    text-decoration: none;
    color: black;
  }

  a.errorref { 
    content: "Common Error" target-counter(attr(href), h1) "." target-counter(attr(href), error) ;
    text-decoration: none;
    color: black;
  }  

  a.h2ref { 
    content: "Section " target-counter(attr(href), h2);
    text-decoration: none;
    color: black;
  }

  a.h3ref { 
    content: "Section " target-counter(attr(href), h2) "." target-counter(attr(href), h3);
    text-decoration: none;
    color: black;
  }

  a.exerciseref, a.exref { 
    content: "Exercise " target-counter(attr(href), exercise) ;
    text-decoration: none;
    color: black;
  }

a.exrref { 
    content: "R" target-counter(attr(href), h1) "." target-counter(attr(href), exr) ;
    text-decoration: none;
    color: black;
  }

  a.exeref { 
    content: "E" target-counter(attr(href), h1) "." target-counter(attr(href), exe) ;
    text-decoration: none;
    color: black;
  }
  
  a.expref { 
    content: "P" target-counter(attr(href), h1) "." target-counter(attr(href), exp) ;
    text-decoration: none;
    color: black;
  }

  a.java8ref { 
    content: "Java 8 Note " target-counter(attr(href), h1) "." target-counter(attr(href), java8) ;
    text-decoration: none;
    color: black;
  }  
}



.chapterRef:before, chapterref:before { 
  content: "the “";
  font-variant: normal;
}

.chapterRef:after, chapterref:after { 
  content: "” chapter";
  font-variant: normal;
}

@media screen { 
  a.tableref:after { 
    font-variant: small-caps;
    content: "this table"
  }

  a.figureref:after { 
    font-variant: small-caps;
    content: "this figure"
  }

  a.literatureref:after { 
    font-variant: small-caps;
    content: "this reference"
  }

  a.exerciseref:after, a.exref:after { 
    font-variant: small-caps;
    content: "this exercise"
  }

a.specialref:after { 
    font-variant: small-caps;
    content: "this special topic"
  }

  a.tipref:after { 
    font-variant: small-caps;
    content: "this programming tip"
  }

  a.errorref:after { 
    font-variant: small-caps;
    content: "this common error"
  }

  a.exeref:after, a.exrref:after, a.expref:after { 
    font-variant: small-caps;
    content: "this exercise"
  }

  a.java8ref:after { 
    font-variant: small-caps;
    content: "this java 8 note"
  }

  a.h2ref:after { 
    font-variant: small-caps;
    content: "this section"
  }

  a.h3ref:after { 
    font-variant: small-caps;
    content: "this section"
  }
}

body { 
  counter-reset: h1;
}

h1, h2, h3, h4, h5, h6 { 
  font-family: sans-serif;
}

h1:before {
  content: counter(h1) ". ";
}

h1 {
  counter-reset: h2 figure table;
  counter-increment: h1;
}

h2:before {
  content: counter(h1) "." counter(h2) ". ";
}

h2 {
  counter-increment: h2;
}

h2 { 
  counter-reset: h3;
}

h2.exercises:before { 
  content: "";
}



h3:before { 
  content: counter(h1) "." counter(h2) "." counter(h3) ". ";
}

h3 { 
  counter-increment: h3;
}

div.literature { 
}

div.literature p:before {
  content: "[" counter(literature) "] ";
}

div.literature p {
  counter-increment: literature;
}

ol.exercises li {
  counter-increment: exercise;
}

div.exr > ol, div.exe > ol, div.exp > ol {
    list-style: none;
}

div.exr > ol > li, div.exe > ol > li, div.exp > ol > li {
    margin-bottom: 0.5em;
}

div.exr > ol > li {
    counter-increment: exr;
}

div.exe > ol > li {
  counter-increment: exe;
}

div.exp > ol > li {
  counter-increment: exp;
}

div.exr > ol > li.hard:before {
    content: "***R" counter(exr) ". ";
    font-weight: bold;
}

div.exr > ol > li.easy:before {
    content: "*R" counter(exr) ". ";
    font-weight: bold;
}

div.exr > ol > li:before {
    content: "**R" counter(exr) ". ";
    font-weight: bold;
}

div.exe > ol > li.hard:before {
    content: "***E" counter(exe) ". ";
    font-weight: bold;
}

div.exe > ol > li.easy:before {
    content: "*E" counter(exe) ". ";
    font-weight: bold;
}

div.exe > ol > li:before {
    content: "**E" counter(exe) ". ";
    font-weight: bold;
}

div.exp > ol > li.hard:before {
    content: "***P" counter(exp) ". ";
    font-weight: bold;
}

div.exp > ol > li.easy:before {
    content: "*P" counter(exp) ". ";
    font-weight: bold;
}

div.exp > ol > li:before {
    content: "**P" counter(exp) ". ";
    font-weight: bold;
}


div.figure { 
  counter-increment: figure;
  padding: 2em;
}

div.figure div:before { /* the caption */
  content: "Figure " counter(h1) "-" counter(figure) ": ";
}

.lower-alpha > li, .la > li { 
  list-style-type: lower-alpha;
}

.hide-link { 
    text-decoration: none;
    color: black;
}

@page {
    @bottom {
        content: counter(page)
    }
}

div.chapter-goals:before {
    content: "Chapter Goals";
    color: white;
    font-size: 1.2em;
    font-family: sans-serif;
    font-weight: bold;
    background: green;
    padding: .5em;
    border-radius: .25em;
}

div.a:before {
    content: "Click to show answer";
}

div.a > * {
    visibility: hidden;
}

div.a.revealed > * {
    visibility: visible;
}

div.a.revealed:before {
    content: "";
}



.q {
    background-image: url(q.png);
    margin-left: 2em;
}

.a {
    background-image: url(a.png);
    margin-left: 2.5em;
}

.Note, .note {
  background-image: url(data:image/png;base64,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);
  background-color: #ffffcc;
}

.Tip, .tip { 
  background-image: url(data:image/png;base64,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);
  background-color: #b4e2d8;
}

.Caution, .caution {
  background-image: url(data:image/png;base64,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);
  background-color: #fed0d3;
}

div.chapter-goals:before {
    content: "Chapter Goals";
    color: white;
    font-size: 1.2em;
    font-family: sans-serif;
    font-weight: bold;
    background: green;
    padding: .5em;
    border-radius: .25em;
}

div.worked-example:before {
    content: "Worked Example " counter(h1) "." counter(workedex);
    color: white;
    font-size: 1.2em;
    font-family: sans-serif;
    font-weight: bold;
    background: #006CB7;
    padding: .5em;
    border-radius: .25em;
}

div.worked-example {
    margin-top: 1em;
    counter-increment: workedex;
    counter-reset: step;    
    border-left: thick solid #006CB7;
    padding-left: 1em;
}

div.howto:before {
    content: "How To " counter(h1) "." counter(howto);
    color: white;
    font-size: 1.2em;
    font-family: sans-serif;
    font-weight: bold;
    background: #006CB7;
    padding: .5em;
    border-radius: .25em;
}

div.howto {
    margin-top: 1em;
    counter-increment: howto;
    counter-reset: step;
    border-left: thick solid #006CB7;
    padding-left: 1em;
}

.step {
    counter-increment: step;
    font-weight: bold;
}

.step:before {
    content: "Step " counter(step) " ";
    color: #006CB7;
}

div.special-topic:before {
    content: "Special Topic " counter(h1) "." counter(special);
    color: white;
    font-size: 1.2em;
    font-family: sans-serif;
    font-weight: bold;
    background: #1FADAE;
    padding: .5em;
    border-radius: .25em;
}

div.special-topic {
    margin-top: 1em;
    counter-increment: special;
    padding-left: 1em;
    border-left: thick solid #1FADAE;
}

div.programming-tip:before {
    content: "Programming Tip " counter(h1) "." counter(tip);
    color: white;
    font-size: 1.2em;
    font-family: sans-serif;
    font-weight: bold;
    background: #828EBC;
    padding: .5em;
    border-radius: .25em;
}

div.programming-tip {
    margin-top: 1em;
    counter-increment: tip;
    padding-left: 1em;
    border-left: thick solid #828EBC;
}

div.common-error:before {
    content: "Common Error " counter(h1) "." counter(error);
    color: white;
    font-size: 1.2em;
    font-family: sans-serif;
    font-weight: bold;
    background: #89B950;
    padding: .5em;
    border-radius: .25em;
}

div.common-error {
    margin-top: 1em;
    counter-increment: error;
    padding-left: 1em;
    border-left: thick solid #89B950;
}

div.self-check {
   margin: .5em;
   counter-increment: selfcheck;
}


div.self-check:before {
    content: "Self Check " counter(selfcheck) " ";
    border-radius: .25em;
    color: white;
    font-family: sans-serif;
    font-size: 0.8em;
    font-weight: bold;
    background: #C92354;
    padding: .125em;
    margin-right: .5em;
}

div.answer:before {
    content: "Answer: ";
    font-weight: bold;
    font-family: sans-serif;
    font-size: 0.9em;
}


div.answer {
    margin-left: 0.5em;
    margin-top: 0.5em;
    font-size: 0.9em;
}



div.intro {
    background: #FFE06A;
    padding: 0.5em;

}

div.intro img {
    float: left;
    margin-right: 1em;
}

.margin {
  font-family: sans-serif;
  font-size: 0.8em; 
  float: left;
  width: 10em;
  background-color: cornsilk;
  padding: 0.5em;
  margin-right: 1em;
  margin-bottom: 0.5em;
}

.title {
  font-family: sans-serif;
  font-size: 1.2em;
  font-weight: bold;
}

.listing {
  font-family: sans-serif;
  font-weight: bold;
  color: blue;
}

div.code-example {
    margin-left: 0em;
    font-family: sans-serif;
    font-size: 0.8em; 
    float: left;
    width: 15em;
    background-color: #EAEFF9;
    padding: 0.5em;
    margin-right: 1em;
    margin-bottom: 0.5em;
}

div.code-example:before {
    content: "FULL CODE EXAMPLE";
    background-color: #006CB7;
    color: white;
    font-family: sans-serif;
    font-weight: bold;    
}

div.code-example > p:first-child:before  {
    content: "Go to wiley.com/go/bigjava to download a program ";
}

.output:before {
  font-family: sans-serif;
  font-weight: bold;
  color: blue;
  content: "Program Run"
}

div.exr:before {
    content: "Review Exercises";
    color: #006CB7;
    font-family: sans-serif;
    background: #FFE06A;
    padding: .25em;
    border-radius: .125em;
}

div.exe:before {
    content: "Practice Exercises";
    color: #006CB7;
    font-family: sans-serif;
    background: #FFE06A;
    padding: .25em;
    border-radius: .125em;
}

div.exp:before {
    content: "Programming Projects";
    color: #006CB7;
    font-family: sans-serif;
    background: #FFE06A;
    padding: .25em;
    border-radius: .125em;
}

div.practice:before {
    content: "Practice It ";
    font-family: sans-serif;
    color: #C92354;
    margin-left: -1em;
}

div.practice > span:first-child:before {
    content: "Now you can try these exercises at the end of the chapter: "
}

div.standard:before {
    content: "Standard Library Items Introduced in this Chapter";
    color: yellow;
    font-family: sans-serif;
    background: black;
    padding: .25em;
    border-radius: .25em;
}


div.java8 {
  counter-increment: java8;
  background-repeat: no-repeat; 
  background-image: url(eightball.jpeg);    
  padding-left: 85px;
  margin-top: 0.5em;
  margin-bottom: 0.5em;
  padding-top: 0.2em;
  padding-bottom: 0.2em;
  border-left: thick solid black;

}

.java8 > p:first-child:before {
  content: "Java 8 Note: " counter(h1) "." counter(java8) ". ";
  font-weight: bold;
}        

.images * { 
    vertical-align: top;
}

.images img {
    width: 60%;
}

.back:before {
    content: "◀";
    font-size: 3em;
    color: orange;
    padding: 0.2em;
}

.forward:before {
    content: "▶";
    font-size: 3em;             
    color: orange;
    padding: 0.2em;
}

dk\:level {
    color: white;
    background: black;
}

d\:indexterm {
    display: none;
}

