@font-face { font-family: "Literata Regular"; src: url("Literata/Literata-Italic.ttf"); font-style: italic; } @font-face { font-family: "Literata Regular"; src: url("Literata/Literata-Regular.ttf"); font-weight: 400; font-style: normal; } @font-face { font-family: "Literata Regular"; src: url("Literata/Literata-BoldItalic.ttf"); font-weight: 600; font-style: italic; } @font-face { font-family: "Literata Regular"; src: url("Literata/Literata-Bold.ttf"); font-weight: 600; } @font-face { font-family: "Literata36"; src: url("Literata_36pt/Literata_36pt-Italic.ttf"); font-style: italic; } @font-face { font-family: "Literata36"; src: url("Literata_36pt/Literata_36pt-Bold.ttf"); font-weight: 600; } @font-face { font-family: "Literata36"; src: url("Literata_36pt/Literata_36pt-BoldItalic.ttf"); font-weight: 600; font-style: italic; } @font-face { font-family: "Literata36"; src: url("Literata_36pt/Literata_36pt-Light.ttf"); font-weight: 300; } @font-face { font-family: "Literata36"; src: url("Literata_36pt/Literata_36pt-LightItalic.ttf"); font-weight: 300; font-style: italic; } @font-face { font-family: "Literata36"; src: url("Literata_36pt/Literata_36pt-Regular.ttf"); font-weight: 400; } html { font-variant-ligatures: common-ligatures; font-family: "Literata Regular", "Iowan Old Style", "Sitka Text", Palatino, "Book Antiqua", serif; font-weight: normal; font-style: normal; } p, span { font-weight: normal; font-style: normal; } #TOC { page: empty; line-height: 1.4; } #TOC > ul { counter-reset: tocCounter; counter-reset: subTocCounter; list-style: none; padding: 0; margin: 0; font-size: 1rem; } #TOC > ul ul { list-style: none; padding: 0; margin: 0; padding-left: 1.25em; font-size: 1rem; } #TOC > ul > li { counter-increment: tocCounter; margin: 0.5rem 0; font-weight: normal; } #TOC li { padding: 0; } #TOC > ul > li li { counter-increment: subTocCounter; margin: 0.5rem 0; } #TOC > ul > li > a { text-transform: uppercase; } #TOC li a { text-decoration: none; color: black; } #TOC li a::after { content: leader(".") target-counter(attr(href), page); } #TOC li a::before { margin-right: 1rem; } #TOC li li a::before { content: counter(subTocCounter) "."; margin-right: 1rem; display: inline-block; width: 1.5rem; text-align: right; font-variant-numeric: tabular-nums; } #TOC li a#toc-do-you-feel-lost-in-a-wilderness-of-web-dev-frameworks { display: none; } #TOC ul ul ul { display: none; } @page { size: A4; margin: 2.5cm 2.75cm; @top-center { content: string(chapter); font-style: italic; font-size: 1rem; } @bottom-center { font-style: italic; content: counter(page); } @footnote { border-top: 1px solid black; } } @page :left { @top-center { content: string(chapter); font-style: italic; font-size: 1rem; } } @page :right { @top-center { content: string(title); font-style: italic; font-size: 1rem; } } @page headingpage { margin: 2cm 2.75cm; @top-center { content: ""; } @bottom-center { content: ""; } } @page partpage { background-color: #f5f5f5; margin: 2cm; @top-center { content: ""; } @bottom-center { content: ""; } } @page subheadingpage { margin: 2cm; @top-center { content: ""; } } @page empty { margin: 2.5cm 3cm; @top-center { content: ""; } @bottom-center { content: ""; } } @page :blank { margin: 2.5cm 3cm; @top-center { content: ""; } @bottom-center { content: ""; } } @page titlepage { /* color: white; background-color: #d4015e; */ margin: 1cm 3cm; font-weight: normal; @top-center { content: ""; } @bottom-center { content: ""; } } @page photopage { background-color: #333; margin: 2cm; @top-center { height: 0; content: ""; } @bottom-center { height: 0; content: ""; } } @page cover { background-color: transparent; margin: 0; @top-center { height: 0; content: ""; } @bottom-center { height: 0; content: ""; } } #cover { page: cover; width: 100%; height: 100%; } #cover img { object-fit: cover; display: block; height: 100%; width: 100%; } .Photo { page: photopage; height: 100%; page-break-after: always; } .Notice { display: none; } #title-block-header, #title-block-header2, #copyright { page: titlepage; padding: 0; margin: 0; margin-top: 12rem; page-break-before: right; } #copyright { page-break-before: left; } #title-block-header h1, #title-block-header2 h1, #faketitle { margin: 0; margin-bottom: 2rem; padding: 0 1rem; font-family: Literata36, "Iowan Old Style", "Sitka Text", Palatino, "Book Antiqua", serif; font-weight: 600; line-height: 1; font-size: 4.5rem; text-align: center; string-set: title content(); counter-reset: chapterCounter; } #title-block-header2 h1 { bookmark-level: none; } #copyright p { font-style: italic; text-align: center; text-indent: 0; margin: 0.5rem 0; } .author { font-size: 2.5rem; text-align: center; margin: 2rem 0; padding: 0; } .subtitle { font-size: 1.5rem; text-align: center; font-style: italic; padding: 1rem 0; } .date { font-size: 3rem; text-align: center; font-style: italic; margin: 0; padding: 0; display: none; } .abstract { font-style: italic; text-align: center; width: 75%; margin: 0 auto; color: white; page-break-after: always; text-indent: 0; } /* Base */ * { box-sizing: border-box; } img { max-width: 100%; height: auto; } body { margin: 0; line-height: 1.475; font-size: 1.1rem; hyphens: auto; } hr { border: none; border-bottom: 1px solid #333; width: 50%; margin: 0 auto; padding-top: 2.2rem; padding-bottom: 2.2rem; height: 1px; } hr.page-break { border: none; margin: 0; page-break-before: always; page-break-after: always; page: empty; } hr.page-break-after { border: none; margin: 0; page-break-after: always; } hr.space { border-color: transparent; } blockquote { -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; margin-left: 2.5em; } blockquote, blockquote p { font-size: 1rem; line-height: 1.2; } a:link { color: #003366; position: relative; } a:visited { color: #620; } a:hover { color: #620; } [aria-hidden="true"] { display: none; } .contact-list { padding: 0; list-style: none; margin: 0 0 2em; } p { margin: 0; } p + p { text-indent: 1.5rem; } ol, blockquote, ul, dl, section, article, details, figcaption { padding: 1.1em 0; -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; text-indent: 0; margin: 0; } li { text-align: left; -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; text-indent: 0; margin: 0; padding-left: 1.5rem; padding-right: 0.7rem; } li + li { padding-top: 1.1rem; } figure { padding: 2.2rem 2.2rem 1.1rem; -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; text-indent: 0; margin: 0; page-break-inside: avoid; } figure.image { padding: 1.1rem 0; } figure.image > figcaption { padding: 0.55rem 2.2rem; } figure blockquote, figure blockquote > p:first-child { padding: 0; } figure figcaption { padding-top: 0.55rem; font-size: 0.9rem; padding-bottom: 0.55rem; font-style: italic; text-align: right; } figure blockquote { font-size: 0.85rem; } figure + figure { padding-top: 0; } h3 + figure { padding-top: 1.1rem; margin-top: 0; } table { width: 100%; page-break-inside: avoid; margin: 1.1em 0; -webkit-hyphens: manual; -ms-hyphens: manual; hyphens: manual; text-indent: 0; /* table-layout: fixed; */ width: 100%; border-collapse: collapse; } th { -webkit-hyphens: manual; -ms-hyphens: manual; hyphens: manual; } main * { text-align: justify; } .sourceCode * { text-align: left; hyphens: none; white-space: pre-wrap; } abbr { font-variant: none; text-transform: uppercase; font-variant-caps: all-small-caps; } pre { max-width: 100%; background-color: white; } h2 { font-family: Literata36, "Iowan Old Style", "Sitka Text", Palatino, "Book Antiqua", serif; padding-top: 0em; margin-top: -5rem; } main h3 { font-family: Literata36, "Iowan Old Style", "Sitka Text", Palatino, "Book Antiqua", serif; counter-increment: subChapterCounter; } h3 { font-size: 2rem; line-height: 1.2; font-weight: 400; text-align: left; margin-bottom: 0.55rem; } h2::before { content: counter(chapterCounter); border-bottom: 1px solid; font-size: 2.5rem; width: 18rem; font-weight: normal; margin: 1.75rem auto 1.5rem; display: block; padding: 1.75rem 0 1.5rem; } h2#introduction::before { content: ""; } h2::after { content: " "; border-top: 1px solid; width: 18rem; height: 1px; margin: 1.75rem auto; display: block; } h2 { font-size: 2.5rem; font-weight: 600; padding: 0.5em 0; margin: 2em 0 0; line-height: 1.2; text-align: center; } #toc-title { page-break-after: avoid; page-break-before: avoid; text-align: left; padding: 0; margin: 3rem 0 2rem; font-size: 2rem; string-set: chapter ""; bookmark-level: 1; } main h2 { string-set: chapter content(); page-break-before: right; break-before: right; page: headingpage; bookmark-level: 1; } main h1 { page-break-before: left; break-before: left; page: partpage; font-size: 6rem; text-align: center; font-weight: 400; line-height: 1; bookmark-level: 1; } main h1::before { content: ""; display: block; break-after: always; } h1 .part { display: block; font-size: 50%; text-align: center; margin: 0; padding-top: 10rem; } main .part-title + .part { display: block; font-size: 50%; text-align: center; margin: 0; padding-top: 1rem; } #what-next .part-title { padding-top: 10rem; display: block; text-align: center; } main h2:not(#introduction):not(#toc-title) { counter-increment: chapterCounter; bookmark-level: 2; } #toc-title::before, #toc-title::after { display: none; } code { font-size: 75%; line-height: 1; font-family: Fira Mono, DejaVu Sans Mono, Menlo, Consolas, Liberation Mono, Monaco, Lucida Console, monospace; } * { text-rendering: geometricprecision !important; } .Aside, .Releases { background-color: #f0f0f0; padding: 0.25rem 2.2rem 1.95rem; margin: 1.1rem -2.2rem; position: relative; } .Aside p:first-child { padding-top: 1.35rem; } h4 { margin-bottom: 0; } .Aside h4 { margin: 0; padding: 0; } .Releases h4 { margin: 0; padding: 0; padding-top: 1.35rem; font-size: 1.35rem; } .Releases li { padding-left: 1.1rem; } .references li p { hyphens: manual; text-align: left; } #toc-appendix-a-choosing-a-web-framework ul { display: none; } hr.epub-break { display: none; }