/* ************************* * Import font (Electrolize) *************************** */ @font-face { font-family: "Electrolize"; src: local("Electrolize"), url("../../node_modules/@fontsource/electrolize/files/electrolize-latin-400-normal.woff2") format("woff2"); } /* *********************** * Non-bootstrap variables ************************* */ // foreground colors $fg: gold; $fg-bright: yellow; $fg-dark: orange; // old fg-colors: deeppink, lightpink, #b3005f; // background colors $bg: cyan; // #00ffff $bg-bright: lightcyan; // #e0ffff $bg-dark: darkcyan; // #008b8b // base font size $html-font-size: 14px; /* ****************************** * Override Bootstrap variables ******************************** */ @import "../../node_modules/bootstrap/scss/functions"; // font $font-family-base: "Electrolize"; // colors $warning: $bg; $danger: $fg; // $input-bg: transparent; $input-color: $fg; $input-font-size: 1rem !important; $input-focus-box-shadow: 0 0 .25rem $bg-bright, 0 0 .5rem $bg, 0 0 1rem $bg-dark !important; // $input-group-addon-color: $bg; $input-group-addon-bg: transparent; $input-group-addon-border-color: none; // $form-range-track-height: .2rem; $form-range-track-bg: $bg; $form-range-track-box-shadow: none; $form-range-thumb-width: .25rem; $form-range-thumb-height: 1rem; $form-range-thumb-bg: $fg; $form-range-thumb-border: none; $form-range-thumb-box-shadow: none; $form-range-thumb-focus-box-shadow: 0 0 .5rem $fg-bright, 0 0 1rem $fg, 0 0 2rem $fg-dark; // validation $form-feedback-valid-color: $warning; $form-feedback-icon-valid: none; $form-feedback-icon-invalid: none; // more bootstrap stylesheets //@import "../../node_modules/bootstrap/scss/bootstrap"; // everything @import "../../node_modules/bootstrap/scss/variables"; @import "../../node_modules/bootstrap/scss/variables-dark"; @import "../../node_modules/bootstrap/scss/maps"; @import "../../node_modules/bootstrap/scss/mixins"; @import "../../node_modules/bootstrap/scss/root"; @import "../../node_modules/bootstrap/scss/containers"; @import "../../node_modules/bootstrap/scss/navbar"; @import "../../node_modules/bootstrap/scss/tables"; @import "../../node_modules/bootstrap/scss/modal"; @import "../../node_modules/bootstrap/scss/forms"; @import "../../node_modules/bootstrap/scss/utilities"; @import "../../node_modules/bootstrap/scss/badge"; @import "../../node_modules/bootstrap/scss/reboot"; /* ************* * Custom mixins *************** */ @mixin aug() { --aug-b: 5px; --aug-bl: 5px; --aug-br: 5px; --aug-l: 5px; --aug-r: 5px; --aug-tl: 5px; --aug-tr: 5px; } @mixin border() { --aug-border-all: .1rem; --aug-border-bg: cyan; // variables don't work in this specific instance --aug-border-opacity: .5; } @mixin inlay() { --aug-inlay-bg: rgba(0, 0, 0, .5); --aug-inlay-x: .12em; --aug-inlay-y: .12em; } /* ************** * Responsiveness **************** */ @media (width <= 500px) { html { font-size: $html-font-size; } .container { min-width: 100vw; max-width: 100vw; } .table-responsive { max-width: calc(100% - .8rem); } } @media (500px < width < 1000px) { html { font-size: calc(100vw / (500px / $html-font-size)); } .container { $calc-width: calc(100vw / 2 + 250px); min-width: $calc-width; max-width: $calc-width; } } @media (1000px <= width) { html { font-size: calc($html-font-size * 2); } .container { min-width: 75vw; max-width: 75vw; } } /* ***************** * Basic styles ******************* */ html { font-family: 'Electrolize', sans-serif; height: 100%; margin: 0; overflow-x: hidden; user-select: none; } body { background-color: darkslategray; background-image: url("../img/bg.jpg"); background-repeat: no-repeat; background-position: center center; background-size: cover; margin: .2rem; } .container { padding: .2rem; position: relative; } .sr2-button { background: transparent; border: .07rem solid $bg; border-radius: .07rem; box-shadow: 0 0 .15rem $bg-bright, 0 0 .3rem $bg, 0 0 .6rem $bg-dark; color: $fg; font-size: 1rem; margin-left: .2rem; margin-right: .2rem; padding-inline: 0px; svg { fill: $fg; height: 93%; width: 93%; vertical-align: unset; } &:focus { border: .1rem solid $bg !important; box-shadow: 0 0 .3rem $bg-bright, 0 0 .6rem $bg, 0 0 1.2rem $bg-dark !important; filter: brightness(150%) !important; outline: none; } &:disabled { box-shadow: none; border-color: $bg-dark; svg { fill: $fg-dark; } } } .display-none { display: none; } /* ***************** * Header styles ******************* */ header.navbar { @include border; @include inlay; --aug-b: 7px; --aug-bl: 7px; --aug-br: 7px; --aug-inlay-bg: rgba(0, 0, 0, .75); --aug-l: 7px; --aug-r: 7px; --aug-tl: 7px; --aug-tr: 7px; padding-left: calc(15px + 1rem); padding-right: 15px; .navbar-brand { color: $bg; font-size: 140%; text-shadow: 0 0 .25rem, 0 0 .5rem, 0 0 .75rem, 0 0 1rem; } nav { justify-content: flex-end !important; } button { height: 2rem; width: 2rem; } } /* ***************** * Table styles ******************* */ .table-responsive { overflow: visible !important; } #combatants-table { border-collapse: collapse !important; margin-bottom: .1rem; margin-top: .4rem; tr { @include aug; @include border; @include inlay; --aug-border-bottom: 0px; --aug-border-right: 0px; } tr:last-of-type td, tr:last-of-type th { --aug-border-bottom: 2px; } .combatant-row { clip-path: none; } th, td { @include aug; @include border; @include inlay; --aug-border-bottom: 0px; --aug-border-right: 0px; background: none !important; vertical-align: middle !important; } th { color: $bg; text-transform: uppercase; } .th-name { padding-left: .75rem !important; text-align: left; width: 100%; } .th-ini { min-width: 4rem; } .th-dice-and-rea { min-width: 3rem; } .th-actions { min-width: min-content; --aug-border-right: 2px; } td { color: $fg; font-weight: bold; text-align: center; vertical-align: middle; .sr2-button { height: 1.3rem; width: 1.3rem; } } .combatant-name:hover, .combatant-ini:hover, .combatant-dice-and-rea:hover { cursor: pointer; } .combatant-name { padding-left: .6rem !important; text-align: left; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .combatant-dice::before { content: attr(data-combatant-dice); } .combatant-rea::before { content: attr(data-combatant-rea); } .combatant-actions { --aug-border-right: 2px; display: flex; min-height: 2rem; min-width: 5rem; > div { display: flex; align-items: center; } } .actions-menu { display: flex; flex-flow: column; padding: .2rem; .sr2-button { margin-bottom: .2rem; margin-top: .2rem; } } } .max-ini td { text-shadow: 0 0 .15rem $fg; } .zero-ini td { color: $fg-dark; } .ko-or-dead td { background-color: rgba(0, 0, 0, .5); color: $fg-dark; text-decoration: line-through .1rem $fg; } .badge.bg-warning { background: radial-gradient(circle at center, $bg, $bg-dark); bottom: .2rem; color: black; left: .2rem; position: absolute; } .badge.bg-danger { background: radial-gradient(circle at center, $fg, $fg-dark); color: black; left: .2rem; position: absolute; top: .3rem; } .damage-dropdown, .actions-dropdown { position: relative; // required for the dropdowns' absolute position to relate to } .damage-monitor, .actions-menu { @include aug; @include border; --aug-inlay-bg: rgba(0, 0, 0, .5); --aug-border-opacity: .75; padding-top: .7rem; padding-bottom: .7rem; position: absolute; top: calc(100% + .12rem); z-index: 200; // center element horizontally w/ respect to parent right: 50%; transform: translateX(50%); // transition: fade in/out transition: opacity .2s ease-in-out, visibility .2s; opacity: 0%; visibility: hidden; } .seen { visibility: visible; opacity: 100%; } .damage-monitor { padding: .5rem; td { padding: .1rem; } button { border: none; border-radius: 0; font-family: Electrolize; font-size: .9rem; font-weight: bold; height: 1.5rem !important; margin: 0rem .15rem; width: 1.5rem !important; svg { height: 100%; width: 100%; } &:focus { outline: none; animation: .6s alternate infinite pulse; animation-delay: -.3s; } @keyframes pulse { from { filter: brightness(.85) } 50% { filter: brightness(1); } to { filter: brightness(1.15); } } } .damage-stun { background: radial-gradient(circle at center, $bg, $bg-dark); box-shadow: none; transition: background .5s, box-shadow .5s; } .damage-stun.active { background: radial-gradient(circle at center, $bg-bright, $bg); box-shadow: 0 0 .25rem $bg-bright, 0 0 .5rem $bg, 0 0 1rem $bg-dark; } .damage-physical { background: radial-gradient(circle at center, $fg, $fg-dark); border-radius: 50%; // circle, not square box-shadow: none; transition: background .5s, box-shadow .5s; } .damage-physical.active { background: radial-gradient(circle at center, $fg-bright, $fg); box-shadow: 0 0 .25rem $fg-bright, 0 0 .5rem $fg, 0 0 1rem $fg-dark; } } /* ***************** * Modal styles ******************* */ .sr2-modal { @include border; @include aug; color: $bg; font-family: Electrolize !important; pointer-events: auto; .modal-header { @include inlay; @include border; --aug-inlay-bottom: 0; border-bottom: none; text-transform: uppercase; button { width: 2.5rem; } } .modal-body { @include inlay; @include border; --aug-inlay-y: 0; } .modal-footer { @include inlay; @include border; --aug-inlay-top: 0; border-top: none; button { width: 5rem; margin: .3rem; } } label { margin: 0; margin-left: calc(100% / 22 + 1rem); } .label-swap { display: flex; flex-flow: column; label { order: 2; } input { order: 1; } } .range-group { margin-top: 1rem; } input { margin: .3em; user-select: text; width: 98%; // 100% is inexplicably too long on the right hand side &::selection { background-color: $fg; color: black; } &[type="number"] { -moz-appearance: textfield; &::-webkit-inner-spin-button, &::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } } &:focus:invalid { box-shadow: 0 0 .25rem $fg-bright, 0 0 .5rem $fg, 0 0 1rem $fg-dark !important; } &[type="range"] { box-shadow: none !important; margin-left: calc(100% / 22 - .15rem); width: calc(100% / 11 * 10 + .3rem); + datalist { border-collapse: collapse; display: table; table-layout: fixed; width: 100%; option { display: table-cell; text-align: center; } } } } #combatant-modal-dice { margin-right: 0; } #combatant-modal-rea { margin-left: 0; } .input-group-text { background-color: transparent; border: none; color: $fg; padding: .25rem; } } /* ***************** * Footer styles ******************* */ .footer-container { bottom: 0px; left: 0px; position: fixed; right: 0px; } footer { @include aug; @include inlay; --aug-border-all: .1rem !important; --aug-border-bg: cyan !important; // vars don't work here --aug-border-opacity: .5 !important; --aug-inlay-bg: rgba(0, 0, 0, .75) !important; --aug-tl: .7rem; --aug-tr: .7rem; p { color: $bg; font-size: x-small; margin: .15em; padding: .25rem; text-align: center; user-select: text; -webkit-user-select: text; a { color: $fg; text-decoration: none; } &::selection, a::selection { background-color: $fg; color: black; } } }