0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2025-12-26 13:52:38 +00:00
Files
homebrewery/themes/V3/Blank/style.less
2025-10-17 14:54:16 -05:00

693 lines
20 KiB
Plaintext

@import (less) './themes/fonts/Blank/fonts.less';
@import (less) './themes/fonts/5e/fonts.less';
@import (less) './themes/assets/assets.less';
@import (less) './themes/fonts/iconFonts/elderberryInn.less';
@import (less) './themes/fonts/iconFonts/diceFont.less';
@import (less) './themes/fonts/iconFonts/gameIcons.less';
@import (less) './themes/fonts/iconFonts/fontAwesome.less';
@import (less) './themes/fonts/Journal/fonts.less';
:root {
//Colors
--HB_Color_Background : #FFFFFF; // White
--HB_Color_WatercolorStain : #000000; // Black
}
@page { margin : 0; }
body { counter-reset : page-numbers 0; }
* { -webkit-print-color-adjust : exact; }
//*****************************
// * MUSTACHE DIVS/SPANS
// *****************************/
.page {
.block {
display : inline-block;
width : 100%;
break-inside : avoid;
img { z-index : 0; }
}
.inline-block {
display : inline-block;
text-indent : initial;
}
}
.useColumns(@multiplier : 1, @fillMode: auto) {
column-fill : @fillMode;
column-count : 2;
}
.columnWrapper {
column-gap : inherit;
max-height : 100%;
column-span : all;
columns : inherit;
column-fill : inherit;
}
.page {
.useColumns();
position : relative;
z-index : 15;
box-sizing : border-box;
width : 215.9mm;
height : 279.4mm;
padding : 1.4cm 1.9cm 1.7cm;
overflow : clip;
background-color : var(--HB_Color_Background);
text-rendering : optimizeLegibility;
contain : strict;
content-visibility : auto;
contain-intrinsic-size : auto none;
}
//*****************************
// * BASE
// *****************************/
.page {
p {
display : block;
overflow-wrap : break-word;
}
strong { font-weight : bold; }
em { font-style : italic; }
sup {
font-size : smaller;
line-height : 0;
vertical-align : super;
}
sub {
font-size : smaller;
line-height : 0;
vertical-align : sub;
}
ul {
padding-left : 1.4em;
list-style-position : outside; //Needed for multiline list items
list-style-type : disc;
}
ol {
padding-left : 1.4em;
list-style-position : outside;
list-style-type : decimal;
}
img { z-index : -1; }
//*****************************
// * HEADERS
// *****************************/
h1,h2,h3,h4,h5,h6 {
font-weight : bold;
line-height : 1.2em;
}
h1 { font-size : 2em; }
h2 { font-size : 1.5em; }
h3 { font-size : 1.17em; }
h4 { font-size : 1em; }
h5 { font-size : 0.83em; }
//*****************************
// * TABLE
// *****************************/
table {
width : 100%;
thead {
display : table-row-group;
font-weight : bold;
}
}
div:not(.columnWrapper) > table + table { // Side-by-side tables should not
margin-top : 0; // have vertical spacing.
}
//************************************
// * CODE BLOCKS
// ************************************/
code {
font-family : 'Courier New', 'Courier', monospace;
overflow-wrap : break-word;
white-space : pre-wrap;
}
pre code {
display : inline-block;
width : 100%;
}
//*****************************
// * EXTRAS
// *****************************/
.columnSplit {
visibility : hidden;
margin-top : 0;
break-after : always;
-webkit-column-break-after : always;
-moz-column-break-after : always;
& + * { margin-top : 0; }
}
//Avoid breaking up
blockquote,table {
z-index : 15;
-webkit-column-break-inside : avoid;
page-break-inside : avoid;
break-inside : avoid;
}
// Nested lists
ul ul,ol ol,ul ol,ol ul {
margin-bottom : 0px;
margin-left : 1.5em;
}
li {
-webkit-column-break-inside : avoid;
page-break-inside : avoid;
break-inside : avoid;
}
/* Wrap Text */
.wrapLeft {
shape-outside : var(--HB_src);
float : right;
shape-margin : 0.2cm;
}
.wrapRight {
shape-outside : var(--HB_src);
float : left;
shape-margin : 0.2cm;
}
/* Watermark */
.watermark {
position : absolute;
top : 0;
left : 0;
z-index : 500;
display : grid !important;
place-items : center;
justify-content : center;
width : 100%;
height : 100%;
margin : 0;
font-size : 120px;
text-transform : uppercase;
opacity : 30%;
transform : rotate(-45deg);
p { margin-bottom : none; }
}
/* Watercolor */
[class*='watercolor'] {
position : absolute;
z-index : -2;
width : 2000px; /* dimensions need to be real big so the user can set */
height : 2000px; /* height or width and the image will maintain aspect ratio */
background-color : var(--HB_Color_WatercolorStain); /* default color */
background-size : cover;
-webkit-mask-image : var(--wc);
mask-image : var(--wc);
-webkit-mask-repeat : no-repeat;
mask-repeat : no-repeat;
-webkit-mask-size : contain;
mask-size : contain;
--wc : @watercolor1; /* default image */
}
.watercolor1 { --wc : @watercolor1; }
.watercolor2 { --wc : @watercolor2; }
.watercolor3 { --wc : @watercolor3; }
.watercolor4 { --wc : @watercolor4; }
.watercolor5 { --wc : @watercolor5; }
.watercolor6 { --wc : @watercolor6; }
.watercolor7 { --wc : @watercolor7; }
.watercolor8 { --wc : @watercolor8; }
.watercolor9 { --wc : @watercolor9; }
.watercolor10 { --wc : @watercolor10; }
.watercolor11 { --wc : @watercolor11; }
.watercolor12 { --wc : @watercolor12; }
/* Image Masks */
[class*='imageMask'] {
position : absolute;
bottom : 50%;
left : 50%;
z-index : -1;
width : 200%;
height : 200%;
background-image : var(--checkerboard);
background-size : 20px;
-webkit-mask-image : var(--wc), var(--revealer);
mask-image : var(--wc);
-webkit-mask-repeat : repeat-x;
mask-repeat : repeat-x;
-webkit-mask-position : 50% calc(50% - var(--offset));
mask-position : 50% calc(50% - var(--offset));
-webkit-mask-size : 50%; //Scale only X to fit page width, leave height at aspect ratio, designed to hang off the edge
mask-size : 50%;
transform : translateY(50%) translateX(-50%) rotate(calc(1deg * var(--rotation))) scaleX(var(--scaleX)) scaleY(var(--scaleY));
--rotation : 0;
--revealer : none;
--checkerboard : none;
--scaleX : 1;
--scaleY : 1;
& > p:has(img) {
position : absolute;
bottom : 50%;
left : 50%;
width : 50%;
height : 50%;
transform : translateX(-50%) translateY(50%) scaleX(calc(1 / var(--scaleX))) scaleY(calc(1 / var(--scaleY))) rotate(calc(-1deg * var(--rotation)));
}
& img {
position : absolute;
bottom : 0;
display : block;
}
&.bottom {
--rotation : 0;
& img {bottom : 0;}
}
&.top {
--rotation : 180;
& img {top : 0;}
}
&.left {
--rotation : 90;
& img {left : 0;}
}
&.right {
--rotation : -90;
& img {right : 0;}
}
&.revealImage {
--revealer : linear-gradient(0deg, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.2));
--checkerboard : url('/assets/waterColorMasks/missingImage.png'); //shows any masked regions not filled by image
}
}
.imageMaskEdge {
&1 { --wc : url('/assets/waterColorMasks/edge/0001.webp'); }
&2 { --wc : url('/assets/waterColorMasks/edge/0002.webp'); }
&3 { --wc : url('/assets/waterColorMasks/edge/0003.webp'); }
&4 { --wc : url('/assets/waterColorMasks/edge/0004.webp'); }
&5 { --wc : url('/assets/waterColorMasks/edge/0005.webp'); }
&6 { --wc : url('/assets/waterColorMasks/edge/0006.webp'); }
&7 { --wc : url('/assets/waterColorMasks/edge/0007.webp'); }
&8 { --wc : url('/assets/waterColorMasks/edge/0008.webp'); }
}
[class*='imageMaskCenter'] {
bottom : calc(var(--offsetY));
left : calc(var(--offsetX));
width : 100%;
height : 100%;
-webkit-mask-image : var(--wc), var(--revealer);
mask-image : var(--wc), var(--revealer);
-webkit-mask-repeat : no-repeat;
mask-repeat : no-repeat;
-webkit-mask-position : 0% 0%;
mask-position : 50% 50%;
-webkit-mask-size : 100% 100%; //Scale both dimensions to fit page size
mask-size : 100% 100%; //Scale both dimensions to fit page size
transform : rotate(calc(1deg * var(--rotation))) scaleX(var(--scaleX)) scaleY(var(--scaleY));
& > p:has(img) {
position : absolute;
bottom : 0;
left : 0;
width : 100%;
height : 100%;
transform : unset;
transform : scaleX(calc(1 / var(--scaleX))) scaleY(calc(1 / var(--scaleY)))
rotate(calc(-1deg * var(--rotation)))
translateX(calc(-1 * var(--offsetX)))
translateY(calc(1 * var(--offsetY)));
}
}
.imageMaskCenter {
&1 { --wc : url('/assets/waterColorMasks/center/0001.webp'); }
&2 { --wc : url('/assets/waterColorMasks/center/0002.webp'); }
&3 { --wc : url('/assets/waterColorMasks/center/0003.webp'); }
&4 { --wc : url('/assets/waterColorMasks/center/0004.webp'); }
&5 { --wc : url('/assets/waterColorMasks/center/0005.webp'); }
&6 { --wc : url('/assets/waterColorMasks/center/0006.webp'); }
&7 { --wc : url('/assets/waterColorMasks/center/0007.webp'); }
&8 { --wc : url('/assets/waterColorMasks/center/0008.webp'); }
&9 { --wc : url('/assets/waterColorMasks/center/0009.webp'); }
&10 { --wc : url('/assets/waterColorMasks/center/0010.webp'); }
&11 { --wc : url('/assets/waterColorMasks/center/0011.webp'); }
&12 { --wc : url('/assets/waterColorMasks/center/0012.webp'); }
&13 { --wc : url('/assets/waterColorMasks/center/0013.webp'); }
&14 { --wc : url('/assets/waterColorMasks/center/0014.webp'); }
&15 { --wc : url('/assets/waterColorMasks/center/0015.webp'); }
&16 { --wc : url('/assets/waterColorMasks/center/0016.webp'); }
&special { --wc : url('/assets/waterColorMasks/center/special.webp'); }
}
[class*='imageMaskCorner'] {
bottom : calc(-50% + var(--offsetY));
left : calc(-50% + var(--offsetX));
width : 200%;
height : 200%;
-webkit-mask-image : var(--wc), var(--revealer);
mask-image : var(--wc), var(--revealer);
-webkit-mask-repeat : no-repeat;
mask-repeat : no-repeat;
-webkit-mask-position : 50% 50%;
mask-position : 50% 50%;
-webkit-mask-size : 100% 100%; //Scale both dimensions to fit page size
mask-size : 100% 100%; //Scale both dimensions to fit page size
transform : rotate(calc(1deg * var(--rotation))) scaleX(var(--scaleX)) scaleY(var(--scaleY));
& > p:has(img) {
bottom : 25%;
left : 25%;
width : 50%;
height : 50%; //Complex transform below to handle mix of % and cm offsets
transform : scaleX(calc(1 / var(--scaleX))) scaleY(calc(1 / var(--scaleY)))
rotate(calc(-1deg * var(--rotation)))
translateX(calc(-1 * var(--offsetX)))
translateY(calc(1 * var(--offsetY)));
}
}
.imageMaskCorner {
&1 { --wc : url('/assets/waterColorMasks/corner/0001.webp'); }
&2 { --wc : url('/assets/waterColorMasks/corner/0002.webp'); }
&3 { --wc : url('/assets/waterColorMasks/corner/0003.webp'); }
&4 { --wc : url('/assets/waterColorMasks/corner/0004.webp'); }
&5 { --wc : url('/assets/waterColorMasks/corner/0005.webp'); }
&6 { --wc : url('/assets/waterColorMasks/corner/0006.webp'); }
&7 { --wc : url('/assets/waterColorMasks/corner/0007.webp'); }
&8 { --wc : url('/assets/waterColorMasks/corner/0008.webp'); }
&9 { --wc : url('/assets/waterColorMasks/corner/0009.webp'); }
&10 { --wc : url('/assets/waterColorMasks/corner/0010.webp'); }
&11 { --wc : url('/assets/waterColorMasks/corner/0011.webp'); }
&12 { --wc : url('/assets/waterColorMasks/corner/0012.webp'); }
&13 { --wc : url('/assets/waterColorMasks/corner/0013.webp'); }
&14 { --wc : url('/assets/waterColorMasks/corner/0014.webp'); }
&15 { --wc : url('/assets/waterColorMasks/corner/0015.webp'); }
&16 { --wc : url('/assets/waterColorMasks/corner/0016.webp'); }
&17 { --wc : url('/assets/waterColorMasks/corner/0017.webp'); }
&18 { --wc : url('/assets/waterColorMasks/corner/0018.webp'); }
&19 { --wc : url('/assets/waterColorMasks/corner/0019.webp'); }
&20 { --wc : url('/assets/waterColorMasks/corner/0020.webp'); }
&21 { --wc : url('/assets/waterColorMasks/corner/0021.webp'); }
&22 { --wc : url('/assets/waterColorMasks/corner/0022.webp'); }
&23 { --wc : url('/assets/waterColorMasks/corner/0023.webp'); }
&24 { --wc : url('/assets/waterColorMasks/corner/0024.webp'); }
&25 { --wc : url('/assets/waterColorMasks/corner/0025.webp'); }
&26 { --wc : url('/assets/waterColorMasks/corner/0026.webp'); }
&27 { --wc : url('/assets/waterColorMasks/corner/0027.webp'); }
&28 { --wc : url('/assets/waterColorMasks/corner/0028.webp'); }
&29 { --wc : url('/assets/waterColorMasks/corner/0029.webp'); }
&30 { --wc : url('/assets/waterColorMasks/corner/0030.webp'); }
&31 { --wc : url('/assets/waterColorMasks/corner/0031.webp'); }
&32 { --wc : url('/assets/waterColorMasks/corner/0032.webp'); }
&33 { --wc : url('/assets/waterColorMasks/corner/0033.webp'); }
&34 { --wc : url('/assets/waterColorMasks/corner/0034.webp'); }
&35 { --wc : url('/assets/waterColorMasks/corner/0035.webp'); }
&36 { --wc : url('/assets/waterColorMasks/corner/0036.webp'); }
&37 { --wc : url('/assets/waterColorMasks/corner/0037.webp'); }
}
}
//*****************************
// * DEFINITION LISTS
// *****************************/
.page {
dl {
padding-left : 1em;
white-space : pre-line;
}
dt {
display : inline;
margin-right : 0.5ch;
margin-left : -1em;
}
dd {
display : inline;
margin-left : 0;
text-indent : 0;
}
}
//*****************************
// * WIDE
// *****************************/
.page {
.wide {
column-span : all;
display : block;
margin-bottom : 1em;
& + * { margin-top : 0; }
}
.blank {
height : 1em;
margin-top : 0;
& + * { margin-top : 0; }
}
}
//*****************************
//* CREDITS
//*****************************/
.page .homebreweryCredits {
p {
font-family : 'NodestoCapsWide';
font-size : 0.4cm;
line-height : 1em;
text-align : center;
text-indent : 0;
letter-spacing : 0.08em;
}
a {
color : inherit;
text-decoration : none;
&:hover { text-decoration : underline; }
}
.homebreweryIcon {
display : block;
height : 1.5cm;
margin : 0 auto;
background-color : black;
-webkit-mask : url('/assets/naturalCritLogoWhite.svg') center / contain no-repeat;
mask : url('/assets/naturalCritLogoWhite.svg') center / contain no-repeat;
}
.homebreweryIcon.red { background-color : red; }
.homebreweryIcon.gold { background-image : linear-gradient(to top left, brown 22.5%, gold 40%, white 60%, gold 67.5%, brown 82.5%); }
}
//*****************************
//* Page Number
//*****************************/
.page {
.pageNumber {
position : absolute;
right : 30px;
bottom : 30px;
width : 50px;
font-size : 0.9em;
text-align : center;
&.auto::after { content : counter(page-numbers); }
}
&:nth-child(even) {
.pageNumber { left : 30px; }
}
.resetCounting { counter-set : page-numbers 1; }
&:not(:has(.skipCounting)) { counter-increment : page-numbers; }
}
//*******************************
// * Ordered List Type Overrides
// *****************************/
@counter-style lower-alpha-trailing-paren {
system: extends lower-alpha;
prefix: "";
suffix: ") ";
}
.page{
.ol-ccby ol {
list-style-type: lower-alpha;
}
.ol-ccby ol ol{
padding-left: 0px !important;
list-style-type: greek;
}
.ol-ccby ol ol ol {
padding-left: 0px !important;
list-style-type: upper-alpha;
}
.ol-ccby ol ol ol ol {
padding-left: 0px !important;
list-style-type: lower-roman;
}
.ol-ccby p {
padding-left: 25px;
text-indent: 0em !important;
}
// Non-indented, numerical lists with slight gap between paragraphs.
.ol-lowerLetters ol {
list-style-type: lower-alpha-trailing-paren;
}
.ol-lowerLetters ol li p {
display: inline;
}
.ol-lowerLetters ol {
list-style-position: inside;
padding: 0px;
}
.ol-lowerLetters ol li:not(:last-child) {
margin-bottom: 0.5em;
}
.ol-noIndent ol {
list-style-position: inside;
padding: 0px;
}
.ol-noIndent ol li p {
display: inline;
}
.ol-noIndent ol li:not(:last-child) {
margin-bottom: 0.5em;
}
}
// *****************************
// * INDEX
// *****************************/
.page {
.index {
ul ul { margin : 0; }
ul {
padding-left : 0;
text-indent : 0;
list-style-type : none;
}
& > ul > li {
padding-left : 1.5em;
text-indent : -1.5em;
}
}
}
// *****************************
// * TABLE OF CONTENTS
// *****************************/
// Default Exclusions
// Anything not exlcuded is included, default Headers are H1, H2, and H3.
h4,
h5,
h6,
.page:has(.frontCover),
.page:has(.backCover),
.page:has(.insideCover),
.noToC,
.toc { --TOC : exclude; }
.tocDepthH2 :is(h1, h2) {--TOC : include; }
.tocDepthH3 :is(h1, h2, h3) {--TOC : include; }
.tocDepthH4 :is(h1, h2, h3, h4) {--TOC : include; }
.tocDepthH5 :is(h1, h2, h3, h4, h5) {--TOC : include; }
.tocDepthH6 :is(h1, h2, h3, h4, h5, h6) {--TOC : include; }
.tocIncludeH1 h1 {--TOC : include; }
.tocIncludeH2 h2 {--TOC : include; }
.tocIncludeH3 h3 {--TOC : include; }
.tocIncludeH4 h4 {--TOC : include; }
.tocIncludeH5 h5 {--TOC : include; }
.tocIncludeH6 h6 {--TOC : include; }
.page {
&:has(.toc)::after { display : none; }
.toc {
-webkit-column-break-inside : avoid;
page-break-inside : avoid;
break-inside : avoid;
h1 {
margin-bottom : 0.3cm;
text-align : center;
}
a {
display : inline;
color : inherit;
text-decoration : none;
&:hover { text-decoration : underline; }
}
h4 {
margin-top : 0.2cm;
line-height : 0.4cm;
& + ul li { line-height : 1.2em; }
}
ul {
padding-left : 0;
margin-top : 0;
list-style-type : none;
a {
display : flex;
flex-flow : row nowrap;
justify-content : space-between;
width : 100%;
}
li + li h3 {
margin-top : 0.26cm;
line-height : 1em;
}
h3 span:first-child::after { border : none; }
span {
display : contents;
&:first-child::after {
bottom : 0.08cm;
flex : 1;
margin-right : 0.16cm;
margin-bottom : 0.08cm;
margin-left : 0.08cm; /* Spacing before dot leaders */
content : '';
border-bottom : 0.05cm dotted #000000;
}
&:last-child {
display : inline-block;
align-self : flex-end;
font-size : 0.34cm;
font-weight : normal;
}
}
ul { /* List indent */
margin-left : 1em;
}
}
&.wide {
.useColumns(0.96, @fillMode: balance);
}
}
.toc.wide li { break-inside : auto; }
}
/**********************************
Firefox endruns
**********************************/
@supports (-moz-user-select: none) { // This section will only apply to Firefox; it's the only browser that supports `-mos-xyz...`
.page {
blockquote, table {
page-break-inside: auto;
break-inside: auto;
}
}
}