Datamodel + Appv2 migration, WIP

This commit is contained in:
2026-01-13 08:09:11 +01:00
parent 93d35abde2
commit 364278527d
143 changed files with 3712 additions and 708 deletions

118
styles/README.md Normal file
View File

@@ -0,0 +1,118 @@
# Structure LESS pour BoL
Ce dossier contient tous les fichiers LESS qui sont compilés en CSS pour le système BoL.
## Structure des fichiers
```
styles/
├── bol.less # Fichier principal (importe tous les autres)
├── global/ # Styles globaux
│ ├── typography.less # Fonts et styles de texte
│ ├── foundry-overrides.less # Overrides Foundry VTT
│ ├── flex.less # Utilitaires Flexbox
│ ├── forms.less # Styles de formulaires
│ ├── item-list.less # Listes d'items
│ ├── colors.less # Couleurs pré-définies
│ └── chat.less # Messages de chat
└── components/ # Composants spécifiques
├── common.less # Styles communs aux sheets
├── actor.less # Feuilles d'acteurs
└── item.less # Feuilles d'items
```
## Compilation
### Commande unique
```bash
npm run css
```
### Mode watch (recompile automatiquement)
```bash
gulp
```
ou
```bash
npm start
```
## Modification des styles
1. **NE PAS modifier** directement `css/bol.css`
2. Modifier les fichiers `.less` appropriés dans `styles/`
3. Compiler avec `npm run css`
4. Le fichier `css/bol.css` sera régénéré automatiquement
## Organisation
### Global (`styles/global/`)
- **typography.less** : Définition des @font-face et styles de texte de base
- **foundry-overrides.less** : Overrides des styles Foundry (pause, scrollbar, etc.)
- **flex.less** : Classes utilitaires flexbox (.flexrow, .flexcol, etc.)
- **forms.less** : Tous les styles de formulaires (inputs, selects, labels, etc.)
- **item-list.less** : Styles des listes d'items (.items-list)
- **colors.less** : Classes de couleurs pré-définies (.red, .bg-red, etc.)
- **chat.less** : Styles des messages de chat et résultats de dés
### Components (`styles/components/`)
- **common.less** : Styles communs à toutes les sheets (.bol.sheet)
- Window header/content
- Sheet header avec banner
- Tabs
- Sheet body
- **actor.less** : Styles spécifiques aux feuilles d'acteurs
- Dimensions et layout
- Images d'attributs (vigor, agility, etc.)
- Footer
- Stats, resources
- HUD et tooltips
- **item.less** : Styles spécifiques aux feuilles d'items
- Dimensions
- Properties list
- Dialog
## Avantages de LESS
1. **Variables** : Réutilisables dans tout le code
2. **Nesting** : Code plus lisible et maintenable
3. **Mixins** : Réutilisation de blocs de styles
4. **Imports** : Organisation modulaire
5. **Opérations** : Calculs CSS (calc() amélioré)
## Exemple d'utilisation
### Avant (CSS)
```css
.bol.sheet.actor .window-content form .sidebar .profile-img {
cursor: pointer;
border: none;
}
```
### Après (LESS)
```less
.bol.sheet.actor {
.window-content {
form {
.sidebar {
.profile-img {
cursor: pointer;
border: none;
}
}
}
}
}
```
## Notes importantes
- La compilation LESS → CSS se fait automatiquement avec gulp
- Le fichier `css/bol.css` est généré et ne doit pas être modifié manuellement
- Tous les imports sont dans `styles/bol.less`
- Les chemins des images/fonts sont relatifs au fichier CSS final dans `css/`

17
styles/bol.less Normal file
View File

@@ -0,0 +1,17 @@
/* ========================================= */
/* BoL System LESS Main File */
/* ========================================= */
/* Global Styles */
@import "global/typography.less";
@import "global/foundry-overrides.less";
@import "global/flex.less";
@import "global/forms.less";
@import "global/item-list.less";
@import "global/colors.less";
@import "global/chat.less";
/* Component Styles */
@import "components/common.less";
@import "components/actor.less";
@import "components/item.less";

View File

@@ -0,0 +1,328 @@
/* ----------------------------------------- */
/* Actor Sheet Styles */
/* ----------------------------------------- */
.bol.sheet.actor {
min-width: 820px;
min-height: 700px;
height: 700px;
.window-content {
.bol-actor-form {
background-image: url("/systems/bol/ui/logo.webp");
background-repeat: no-repeat;
background-size: 190px 115px;
}
form {
.sidebar {
padding-top: 115px;
min-width: 250px;
width: 250px;
max-width: 250px;
.profile-img {
cursor: pointer;
border: none;
background-color: #EEE;
height: auto;
width: calc(250px - 10px);
min-width: calc(250px - 10px);
max-width: calc(250px - 10px);
margin-right: 10px;
}
}
.main {
.sheet-body {
overflow: hidden;
.tab {
.attribute {
&.vigor {
background-image: url("/systems/bol/ui/attributes/vigor.webp");
background-repeat: no-repeat;
background-position: center center;
background-size: 64px 64px;
}
&.agility {
background-image: url("/systems/bol/ui/attributes/agility.webp");
background-repeat: no-repeat;
background-position: center center;
background-size: 64px 64px;
}
&.mind {
background-image: url("/systems/bol/ui/attributes/mind.webp");
background-repeat: no-repeat;
background-position: center center;
background-size: 64px 64px;
}
&.appeal {
background-image: url("/systems/bol/ui/attributes/appeal.webp");
background-repeat: no-repeat;
background-position: center center;
background-size: 64px 64px;
}
.stat-value {
margin-top: -10px;
}
}
}
}
}
}
}
.bol-footer {
height: 62px;
max-height: 62px;
min-height: 62px;
.footer-left img {
border: none;
height: 62px;
max-height: 62px;
min-height: 62px;
transform: scaleX(-1);
}
.footer-center {
margin-top: 20px;
margin-left: calc(-330px * 2);
margin-right: calc(-330px * 2);
height: 30px;
max-height: 30px;
min-height: 30px;
background-color: black;
}
.footer-right {
text-align: right;
img {
border: none;
height: 62px;
max-height: 62px;
min-height: 62px;
}
}
}
.stat-max {
font-size: 1rem;
font-weight: bold;
color: #4b4a44;
}
.bonus-text {
margin-top: 7px;
}
.stat-value {
font-size: 1.5rem;
font-weight: bold;
color: darkred;
}
.resource-bonus {
font-weight: bold;
color: darkred;
}
.resources-value {
background-color: #2a2a2a30;
border-color: #003c1e;
margin-top: 4px;
border-radius: 0.5rem;
}
.resources-novalue {
background-color: #2a2a2a00;
border-color: #003c1e;
margin-top: 4px;
border-radius: 0.5rem;
}
.stat-roll {
font-size: 1.5rem;
color: #4b4a44;
&.malus {
color: darkred;
}
&.bonus {
color: darkgreen;
}
}
.header-field-label,
.stat-label {
font-weight: bold;
font-family: "Wolfsbane2Expanded", cursive;
font-size: 2rem;
font-variant: small-caps;
}
.rounded {
border-radius: 100px;
width: 4rem;
height: 4rem;
}
.rounded-border {
border: 3px solid #4b4a44;
box-shadow: 5px 5px 5px gray;
border-radius: 100px;
width: 4rem;
height: 4rem;
}
.half-rounded {
border-radius: 100px 100px 0px 0px;
width: 4rem;
height: 4rem;
}
.half-rounded-border {
border-radius: 100px 100px 0px 0px;
border: 3px solid #4b4a44;
width: 4rem;
height: 4rem;
}
}
/* ----------------------------------------- */
/* HUD and Chat Extensions */
/* ----------------------------------------- */
.rollable {
cursor: pointer;
}
.chat-message .chat-icon {
float: right;
border: 1px outset lightgray;
box-shadow: 3px 3px 3px black;
margin: 3px;
width: 64px;
height: 64px;
}
.dialog-button {
max-height: 2rem;
}
.xp-next {
color: darkgrey;
font-size: 1.0rem;
border: 1px solid #4b4a44;
box-shadow: 1px 1px 1px gray;
border-radius: 100px;
width: 1.25rem;
height: 1.25rem;
}
.tooltip-container {
position: relative;
display: inline-block;
.tooltiptext {
text-align: center;
position: absolute;
z-index: 1;
visibility: hidden;
opacity: 0;
transition: opacity 0.3s;
background-color: #f2f3a2a0;
padding: 4px;
width: 4rem;
border-radius: 25%;
border-width: 1px;
transform: translate(-40%, -60%);
}
&:hover .tooltiptext {
visibility: visible;
opacity: 1;
}
}
.tokenhudext {
display: flex;
flex: 0 !important;
font-family: CaslonPro;
font-weight: 600;
&.left {
justify-content: flex-start;
flex-direction: column;
position: absolute;
top: 2.75rem;
right: 16rem;
}
&.right {
justify-content: flex-start;
flex-direction: column;
position: absolute;
top: -4rem;
max-width: 250px;
left: 4rem;
}
&.right2 {
justify-content: flex-start;
flex-direction: column;
position: absolute;
top: -4rem;
left: 11rem;
}
}
.control-icon.tokenhudicon {
width: fit-content;
height: fit-content;
min-width: 6rem;
flex-basis: auto;
padding: 0.20rem;
line-height: 1.1rem;
margin: 0.20rem;
&.right {
margin-left: 8px;
}
}
#token-hud .status-effects.active {
z-index: 2;
}
.bol-hud-menu label {
font-size: 0.6rem;
}
.bol-margin-tb-2 {
margin-top: 2px;
margin-bottom: 2px;
}
.character-summary-container {
opacity: 0.95;
}
.character-summary-rollable {
text-decoration: underline;
}
.activated-green {
color: darkgreen;
}
.compendium-sidebar .directory-item.compendium.locked .compendium-banner {
opacity: 0.5;
}

View File

@@ -0,0 +1,127 @@
/* ----------------------------------------- */
/* Common Sheet Styles */
/* ----------------------------------------- */
body.system-bol img#logo {
content: url("/systems/bol/ui/logo2.webp");
}
.journal-page-content {
/* Reserved for future use */
}
.bol.sheet {
.window-header {
border: none;
}
.window-content {
height: 100%;
padding: 10px;
overflow-y: hidden;
background: transparent;
form {
border: 10px solid transparent;
border-image: url("/systems/bol/ui/box-border-large.webp") 36 repeat;
border-image-outset: 1;
background: white;
margin: 0;
padding: 0;
height: 100%;
.sheet-header {
background-image: url("/systems/bol/ui/banner.webp");
background-repeat: no-repeat;
background-size: 330px 62px;
background-position-y: -15px;
background-position-x: right;
height: 115px;
min-height: 115px;
max-height: 115px;
overflow: hidden;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: flex-end;
padding-bottom: 10px;
.header-field {
.header-field-group {
overflow: hidden;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: baseline;
.header-field-label {
margin-right: 5px;
}
.charname,
.itemname,
.header-field-value {
color: #4b4a44;
font-family: 'Contrail One', cursive;
font-size: 1.5rem;
background-color: #EEE;
}
}
}
}
.main {
.tabs {
flex: 0 0 30px;
background-color: black;
.item {
line-height: 30px;
font-weight: bold;
font-family: "CCMeanwhile", cursive;
color: white;
padding-top: 4px;
font-size: 0.8em;
&.active {
text-decoration: underline;
text-shadow: none;
}
}
}
.sheet-body {
overflow: hidden;
.tab {
height: 95%;
border: none;
overflow-y: auto;
&.description {
.editor,
.editor-content {
height: 100%;
}
}
}
}
}
}
}
}
.sheet-profile-img {
cursor: pointer;
border: none;
background-color: #EEE;
height: auto;
width: 96px;
height: 96px;
min-width: 96px;
min-height: 96px;
max-width: 96px;
margin-right: 10px;
}

View File

@@ -0,0 +1,56 @@
/* ----------------------------------------- */
/* Item Sheet Styles */
/* ----------------------------------------- */
.bol.sheet.item {
min-width: 460px;
min-height: 400px;
h1 input.itemname {
margin-top: 32px;
min-width: 24rem;
font-family: "Wolfsbane2Expanded", cursive;
}
.item-properties {
flex: 0 0 150px;
margin: 5px 5px 5px 0;
padding-right: 5px;
border-right: 1px groove #eeede0;
.form-group {
margin: 0;
label {
line-height: 20px;
}
}
.properties-list {
list-style: none;
margin: 0;
padding: 0;
li {
margin: 3px 0;
padding: 0 2px;
background: rgba(0, 0, 0, 0.05);
border: 1px groove #eeede0;
text-align: center;
font-size: 12px;
line-height: 18px;
}
}
}
}
.bol.dialog .sheet-header h3 {
font-family: "Wolfsbane2Expanded", cursive;
font-size: 24px;
color: black;
}
.editor,
.editor-content {
height: 100%;
}

99
styles/global/chat.less Normal file
View File

@@ -0,0 +1,99 @@
/* ----------------------------------------- */
/* Chat Messages */
/* ----------------------------------------- */
.message-header {
h2.damage {
color: orangered;
font-weight: bold;
}
h2.critical {
color: green;
font-weight: bold;
}
h2.fumble {
color: red;
font-weight: bold;
}
h2.success {
color: darkgreen;
font-weight: bold;
}
h2.failure {
color: darkred;
font-weight: bold;
}
h2.roll {
color: darkslategrey;
font-weight: bold;
}
}
h2.good {
color: darkgreen;
font-weight: bold;
}
h2.bad {
color: darkred;
font-weight: bold;
}
.chat-message {
margin: 3px;
padding: 10px;
font-size: 14px;
border-radius: 0;
background-color: white;
background-image: url("/systems/bol/ui/box-border-large.webp");
background-repeat: no-repeat;
background-size: 100% 100%;
.message-header {
.flavor-text {
font-family: "IMFellDWPicaSC-Regular", serif;
font-size: 14px;
h2 {
font-family: "Modesto Condensed", "Palatino Linotype", serif;
font-size: 20px;
}
}
}
.message-content {
.dice-roll {
.dice-result {
.dice-formula {
border-radius: 0px;
border: 1px inset lightgray;
background-color: #282828;
color: white;
}
.dice-tooltip {
.tooltip-part {
.part-total {
border-radius: 0px;
border: 1px inset lightgray;
background-color: #2a2a2a;
color: white;
}
}
}
.dice-total {
border-radius: 0px;
border: 1px inset lightgray;
background-color: #2a2a2a;
color: white;
}
}
}
}
}

110
styles/global/colors.less Normal file
View File

@@ -0,0 +1,110 @@
/* ----------------------------------------- */
/* Premade Colors */
/* ----------------------------------------- */
.light {
color: lightgray;
}
.bg-light {
background: lightgray;
}
.darkgray {
color: #23221d;
}
.bg-darkgray {
background: #23221d;
color: #fff;
}
.darkbrown {
color: #464331c4;
}
.bg-darkbrown {
background: #464331c4;
color: #fff;
}
.darkslate {
color: darkslategray;
}
.bg-darkslate {
background: darkslategray;
color: #fff;
}
.darkgreen {
color: #003c1e;
}
.bg-darkgreen {
background: #003c1e;
color: #fff;
}
.darkblue {
color: midnightblue;
}
.bg-darkblue {
background: midnightblue;
color: #fff;
}
.blue {
color: #009ee0;
}
.bg-blue {
background: #009ee0;
color: #fff;
}
.green {
color: #44a12b;
}
.bg-green {
background: #44a12b;
color: #fff;
}
.black {
color: #000;
}
.bg-black {
background: #000;
color: #fff;
}
.red {
color: #cd071e;
}
.bg-red {
background: #cd071e;
color: #fff;
}
.darkred {
color: darkred;
}
.bg-darkred {
background: darkred;
color: #fff;
}
.purple {
color: purple;
}
.bg-purple {
background: purple;
color: #fff;
}

98
styles/global/flex.less Normal file
View File

@@ -0,0 +1,98 @@
/* ----------------------------------------- */
/* Flexbox Utilities */
/* ----------------------------------------- */
.flxrow {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
> * {
flex: 1;
}
.flex1 { flex: 1; }
.flex2 { flex: 2; }
.flex3 { flex: 3; }
.flex4 { flex: 4; }
}
.flexrow {
display: flex;
flex-flow: row wrap;
justify-content: flex-start;
/* Wrong in v13: > * { flex: 1; } */
.flex1 { flex: 1; }
.flex2 { flex: 2; }
.flex3 { flex: 3; }
.flex4 { flex: 4; }
.flex5 { flex: 5; }
.flex6 { flex: 6; }
.flex7 { flex: 7; }
.flex8 { flex: 8; }
.flex9 { flex: 9; }
}
.flexcol {
.flex1 { flex: 1; }
.flex2 { flex: 2; }
.flex3 { flex: 3; }
.flex4 { flex: 4; }
}
.flex-group-center,
.flex-group-left,
.flex-group-right {
justify-content: center;
align-items: center;
text-align: center;
padding: 5px;
}
.flex-group-left {
justify-content: flex-start;
text-align: left;
}
.flex-group-right {
justify-content: flex-end;
text-align: right;
}
.center {
text-align: center;
display: flex;
justify-content: center;
align-items: center;
}
.left {
text-align: left;
display: flex;
align-items: center;
justify-content: flex-start;
}
.right {
justify-content: flex-end;
text-align: right;
display: flex;
align-items: center;
}
.flex-center {
align-items: center;
justify-content: center;
text-align: center;
}
.flex-between {
justify-content: space-between;
}
.no-wrap {
flex-wrap: nowrap !important;
}

233
styles/global/forms.less Normal file
View File

@@ -0,0 +1,233 @@
/* ----------------------------------------- */
/* Form Styles */
/* ----------------------------------------- */
.bol {
input[readonly="true"] {
border: none;
color: dimgray;
cursor: not-allowed;
width: 100%;
vertical-align: middle;
background: transparent;
}
input[type="text"],
input[type="number"],
input[type="text"]:hover,
input[type="number"]:hover,
input[type="text"]:focus,
input[type="number"]:focus {
border-radius: 0;
border: none;
box-shadow: none;
}
input:disabled:hover,
select:disabled:hover,
textarea:disabled:hover,
input:disabled:focus,
select:disabled:focus,
textarea:disabled:focus {
box-shadow: none !important;
border: 1px solid transparent !important;
outline: none !important;
}
button {
background: rgba(0, 0, 0, 0.1);
}
select {
box-shadow: none;
font-size: 14px;
text-align: center;
text-align-last: center;
-moz-text-align-last: center;
width: 100%;
border: none;
border-radius: 0;
&[multiple] {
box-shadow: none;
border: none;
font-size: 14px;
&:focus option:checked {
background: darkred linear-gradient(0deg, darkred 0%, darkred 100%);
color: white;
}
}
}
option {
font-size: 14px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
&:hover,
&:focus,
&:active,
&:checked,
&[selected] {
cursor: pointer;
background: darkred linear-gradient(0deg, darkred 0%, darkred 100%);
color: white;
}
}
label.checkbox {
flex: auto;
padding: 0;
margin: 0;
height: 22px;
line-height: 22px;
font-size: 11px;
> input[type="checkbox"] {
width: 16px;
height: 16px;
margin: 0 2px 0 0;
position: relative;
top: 4px;
}
&.right > input[type="checkbox"] {
margin: 0 0 0 2px;
}
}
.form-group {
label {
flex: 2;
font-weight: bold;
}
.form-fields {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
> * {
flex: 1;
margin: 0 3px 0 0;
&:last-child {
margin-right: 0;
}
.flex1 { flex: 1; }
.flex2 { flex: 2; }
.flex3 { flex: 3; }
.flex4 { flex: 4; }
}
label {
flex: 0 0 100%;
margin: 0;
&.checkbox {
flex: auto;
text-align: left;
}
}
.field-value {
text-align: center;
}
}
&.stacked {
label {
flex: 0 0 100%;
margin: 0;
&.checkbox {
flex: auto;
text-align: left;
}
}
}
}
.form-header {
margin: 0.25em 0 0.25em 0;
padding: 2px 5px;
font-family: "Wolfsbane2Expanded", cursive;
color: #4b4a44;
background-color: lightgray;
}
h1.form-header {
font-size: 2.2em;
font-weight: 700;
}
h2.form-header {
font-size: 1.8em;
font-weight: 500;
border-bottom: 1px groove #eeede0;
}
h3.form-header {
font-size: 1.2em;
font-weight: 500;
border-bottom: 1px groove #eeede0;
}
h4.form-header {
font-size: 1em;
font-weight: 500;
font-family: 'Signika', sans-serif;
color: black;
background-color: transparent;
border-top: none;
border-bottom: 1px groove #eeede0;
}
.tag {
display: inline-block;
margin: 0 2px 0 0;
padding: 0 3px;
font-size: 10px;
line-height: 16px;
border: 1px solid #999;
border-radius: 3px;
background: rgba(0, 0, 0, 0.05);
}
::placeholder {
color: lightgray;
opacity: 1;
}
:-ms-input-placeholder {
color: lightgray;
}
::-ms-input-placeholder {
color: lightgray;
}
input::placeholder {
color: lightgray;
}
.property {
margin-top: 2px;
}
.inc-dec-btns {
color: #4b4a44;
}
}
.chat-button {
font-size: 0.8rem;
}
.summmary-number {
padding-left: 4rem;
}

View File

@@ -0,0 +1,71 @@
/* ----------------------------------------- */
/* Foundry VTT Overrides */
/* ----------------------------------------- */
#pause {
background: none;
> img {
width: 200px;
height: 200px;
top: -50px;
left: calc(50% - 100px);
opacity: 0.7;
}
h3 {
font-family: "IMFellDWPicaSC-Regular", serif;
font-size: 32px;
text-shadow: 0px 3px 5px #000000;
}
}
::-webkit-scrollbar-thumb {
outline: none;
border-radius: 3px;
background: #999 !important;
border: 1px solid #333 !important;
border-color: #333 !important;
}
::-webkit-scrollbar-track {
box-shadow: 0 0 3px #005d67 inset !important;
border-radius: 3px;
}
* {
scrollbar-width: thin !important;
scrollbar-color: #005d67 #ccc !important;
}
.element-invisible {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
border: 0;
padding: 0;
clip: rect(0 0 0 0);
overflow: hidden;
}
.roll-box {
border-width: 1px;
border-color: #000000;
margin-bottom: 2px;
}
.hide {
display: none;
}
ul.no-bullets {
list-style-type: none;
padding: 0;
margin: 0;
}
.nomargin {
margin: 0;
padding: 0;
}

View File

@@ -0,0 +1,105 @@
/* ----------------------------------------- */
/* Items List */
/* ----------------------------------------- */
.items-list {
list-style: none;
margin: 7px 0;
padding: 0;
overflow-y: hidden;
.item-header {
font-family: 'Signika', sans-serif;
font-size: 1em;
color: #4b4a44;
background-color: lightgray;
.item-name {
font-family: "Wolfsbane2Expanded", cursive;
font-size: 1.5em;
}
}
.item {
min-height: 30px;
line-height: 24px;
padding: 3px 0 3px 3px;
border-bottom: 1px solid #BBB;
align-items: stretch;
.item-image {
flex: 0 0 30px;
padding: 0;
margin: 0 5px 0 0;
height: 30px;
width: 30px;
min-height: 30px;
min-width: 30px;
img {
padding: 0;
margin: 0;
border: none;
height: 30px;
width: 30px;
min-height: 30px;
min-width: 30px;
}
&.roll-weapon,
&.roll-career {
background-color: transparent;
background-image: url("../../../icons/svg/dice-target.svg") !important;
background-size: 30px 30px;
background-repeat: no-repeat;
background-position: center;
cursor: pointer;
&:hover {
background-color: gray;
img {
visibility: hidden;
}
}
}
}
.item-name,
.item-field {
margin: 0;
}
.item-controls-1 {
flex: 0 0 18px;
}
.item-controls,
.item-controls-2 {
flex: 0 0 36px;
}
.item-controls-3 {
flex: 0 0 54px;
}
.item-control {
color: #4b4a44;
}
}
.item-name-fixed-medium {
min-width: 8rem;
width: 8rem;
}
.item-field-fixed-short {
max-width: 3rem;
min-width: 3rem;
width: 3rem;
}
}
.bougette-dice-img {
color: rgba(150, 44, 44, 0.70);
}

View File

@@ -0,0 +1,61 @@
/* ----------------------------------------- */
/* LOCAL FONTS */
/* ----------------------------------------- */
@font-face {
font-family: 'Contrail One';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://fonts.gstatic.com/s/contrailone/v10/eLGbP-j_JA-kG0_Zo51noafdZQ.ttf) format('truetype');
}
@font-face {
font-family: "CCMeanwhile";
src: url('../fonts/ccmeanwhile-regular.ttf');
}
@font-face {
font-family: "Wolfsbane2";
src: url('../fonts/wolfsbane2.ttf');
}
@font-face {
font-family: "Wolfsbane2Condensed";
src: url('../fonts/wolfsbane2cond.ttf');
}
@font-face {
font-family: "Wolfsbane2Expanded";
src: url('../fonts/wolfsbane2expand.ttf');
}
@font-face {
font-family: "IMFellDWPicaSC-Regular";
src: url('../fonts/IMFellDWPicaSC-Regular.ttf');
}
/* ----------------------------------------- */
/* TEXT STYLES */
/* ----------------------------------------- */
a.entity-link,
a.inline-roll {
border: none;
background: transparent;
border-bottom: 1px dotted grey;
padding: 0;
}
a.inline-roll {
border: none;
}
a:hover {
text-shadow: 0 0 5px #a00;
}
.ellipsis {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}