Web Dev Solutions

Catalin Mititiuc

From a69623b0ab6baff9f968e126c25d7e961e9dde53 Mon Sep 17 00:00:00 2001 From: Catalin Mititiuc Date: Thu, 2 May 2024 11:02:10 -0700 Subject: Organize public directory contents into assets folders --- public/assets/css/damage_block.css | 18 ++ public/assets/css/map.css | 369 ++++++++++++++++++++++++++ public/assets/css/soldier_record_block.css | 55 ++++ public/assets/css/style.css | 411 +++++++++++++++++++++++++++++ 4 files changed, 853 insertions(+) create mode 100644 public/assets/css/damage_block.css create mode 100644 public/assets/css/map.css create mode 100644 public/assets/css/soldier_record_block.css create mode 100644 public/assets/css/style.css (limited to 'public/assets/css') diff --git a/public/assets/css/damage_block.css b/public/assets/css/damage_block.css new file mode 100644 index 0000000..cc7e4dc --- /dev/null +++ b/public/assets/css/damage_block.css @@ -0,0 +1,18 @@ +.damage-effect-indicator.bruise { + background-color: orange; +} + +.damage-effect-indicator.lethal { + background-color: red; +} + +.damage-effect-indicator { + width: 20px; + height: 30px; + margin: 0 auto; + padding: 0; + border: 1px solid black; + display: block; + user-select: none; + font-family: monospace; +} diff --git a/public/assets/css/map.css b/public/assets/css/map.css new file mode 100644 index 0000000..0c2fed9 --- /dev/null +++ b/public/assets/css/map.css @@ -0,0 +1,369 @@ +svg { + overflow: hidden; +} + +image { + image-rendering: pixelated; +} + +image.map-scans { + image-rendering: auto; +} + +text { + user-select: none; +} + +use[href="#hex"] { + opacity: 0; + fill: transparent; + fill-opacity: 0.5; + stroke-width: 0.5px; + stroke: black; +} + +use[href="#hex"].active { + opacity: 0.2; + fill: teal; + stroke: black; +} + +.sight-line-target use[href="#hex"] { + opacity: 1; + stroke: orangered; + fill-opacity: 0.04; +} + +polyline { + fill: none; +} + +polyline.move-trace { + stroke: white; + stroke-dasharray: 2; +} + +#background { + fill: #bacae3; +} + +#map2 { + transform-origin: 0px 0px; + transform: translate(-0.9px, -2.4px) scale(0.999, 1.007); +} + +#map3 { + transform-origin: 0px 0px; + transform: translate(1.3px, 1564.1px) rotate(0.1deg) scale(0.999, 1.002); +} + +#counter-base { + r: inherit; +} + +g.troop-counter, g.counter, g.troop-counter use { + r: inherit; +} + +g.troop-counter-template, g.troop-counter-template use { + r: inherit; +} + +g.weapon-symbol { + stroke: white; + stroke-width: 0.5px; +} + +g.troop-counter-template text { + fill: white; + font-size: 12px; + font-weight: bold; + font-family: monospace; + cursor: default; + text-anchor: middle; + pointer-events: none; + user-select: none; + transform: translateY(4px); + stroke: none; +} + +[href="#counter-prone"] { + transform: translate(-5px, 6px); +} + +[href="#counter-grenade"] { + transform: translate(-5px, -5px); +} + +g.clone { + stroke: white; + stroke-width: 0.5px; + stroke-dasharray: 1; +} + +g.clone [href="#counter-prone"] { + opacity: 0.5; +} + +.removed[href="#counter-prone"] { + opacity: 0.5; +} + +g[data-allegiance="defender"].clone { + fill: rgb(255, 126, 126); +} + +g[data-allegiance="attacker"].clone { + fill: rgb(130, 190, 130); +} + +text.counter, #troop-counter text { + font-size: 12px; + font-weight: bold; + fill: white; + font-family: sans-serif; + cursor: default; + text-anchor: middle; + transform: translateY(4px); + pointer-events: none; + user-select: none; +} + +polygon.firing-arc[data-allegiance="defender"] { + fill: red; +} + +polygon.firing-arc[data-allegiance="attacker"] { + fill: green; +} + +#shapes { + opacity: 0.1; +} + +#shapes polygon { + stroke: none; +} + +#lines polyline, #lines line { + fill: none; + stroke: black; + stroke-width: 0.5; +} + +#lines line { + stroke-opacity: 0.2; +} + +#lines line { + pointer-events: none; +} + +.sight-line { + stroke: orangered; + stroke-width: 0.5px; + pointer-events: none; +} + +#hex { + fill: inherit; + fill-opacity: inherit; + stroke: inherit; + stroke-width: inherit; + stroke-opacity: inherit; +} + +g.counter use, use[href*="#t-"] { + r: 5px; +} + +g.selected use { + animation: 1s selected 0.25s linear infinite; + stroke-width: 2px; + stroke: yellow; + r: 6px; +} + +@keyframes selected { + 50% { + /* stroke: yellow; */ + stroke-width: 0px; + r: 5px; + } +} + +.counter[data-allegiance="attacker"] { + fill: green; +} + +.counter[data-allegiance="defender"] { + fill: red; +} + +.gameboard { + transform: translate(19px, 31px) scale(4); +} + +/* Inradius and circumradius values come from the hexagon */ +.grid, g.start-locations { + --inradius: 8.66px; + --circumradius: 10px; + --x-step: calc(var(--inradius) * 2); + --y-step: calc((3 / 2) * var(--circumradius)); +} + +g[data-y], g.start-locations > g { + --translateX: 0; + transform: translate(var(--translateX), calc(var(--y-step) * var(--i))); +} + +g[data-y]:nth-child(odd) { + --translateX: calc(var(--inradius)); +} + +[data-x] use[href="#hex"] { + --scale: 1; + transform: scale(var(--scale)); +} + +[data-x]:hover use[href="#hex"] { + /* --scale: 0.95; */ + opacity: 1; + fill: orange; + stroke: black; +} + +[data-x]:hover use[href*="#t-"] { + transform: scale(1.5); +} + +[data-x] { + --scale: 1; + transform: translateX(calc(var(--x-step) * var(--i))) scale(var(--scale)); +} + +g[data-y="0"] { --i: 0; } +g[data-y="1"] { --i: 1; } +g[data-y="2"] { --i: 2; } +g[data-y="3"] { --i: 3; } +g[data-y="4"] { --i: 4; } +g[data-y="5"] { --i: 5; } +g[data-y="6"] { --i: 6; } +g[data-y="7"] { --i: 7; } +g[data-y="8"] { --i: 8; } +g[data-y="9"] { --i: 9; } +g[data-y="10"] { --i: 10; } +g[data-y="11"] { --i: 11; } +g[data-y="12"] { --i: 12; } +g[data-y="13"] { --i: 13; } +g[data-y="14"] { --i: 14; } +g[data-y="15"] { --i: 15; } +g[data-y="16"] { --i: 16; } +g[data-y="17"] { --i: 17; } +g[data-y="18"] { --i: 18; } +g[data-y="19"] { --i: 19; } +g[data-y="20"] { --i: 20; } +g[data-y="21"] { --i: 21; } +g[data-y="22"] { --i: 22; } +g[data-y="23"] { --i: 23; } +g[data-y="24"] { --i: 24; } +g[data-y="25"] { --i: 25; } +g[data-y="26"] { --i: 26; } +g[data-y="27"] { --i: 27; } +g[data-y="28"] { --i: 28; } +g[data-y="29"] { --i: 29; } +g[data-y="30"] { --i: 30; } +g[data-y="31"] { --i: 31; } +g[data-y="32"] { --i: 32; } +g[data-y="33"] { --i: 33; } +g[data-y="34"] { --i: 34; } +g[data-y="35"] { --i: 35; } +g[data-y="36"] { --i: 36; } +g[data-y="37"] { --i: 37; } +g[data-y="38"] { --i: 38; } +g[data-y="39"] { --i: 39; } +g[data-y="40"] { --i: 40; } +g[data-y="41"] { --i: 41; } +g[data-y="42"] { --i: 42; } +g[data-y="43"] { --i: 43; } +g[data-y="44"] { --i: 44; } +g[data-y="45"] { --i: 45; } +g[data-y="46"] { --i: 46; } +g[data-y="47"] { --i: 47; } +g[data-y="48"] { --i: 48; } +g[data-y="49"] { --i: 49; } +g[data-y="50"] { --i: 50; } +g[data-y="51"] { --i: 51; } +g[data-y="52"] { --i: 52; } +g[data-y="53"] { --i: 53; } +g[data-y="54"] { --i: 54; } +g[data-y="55"] { --i: 55; } +g[data-y="56"] { --i: 56; } +g[data-y="57"] { --i: 57; } +g[data-y="58"] { --i: 58; } +g[data-y="59"] { --i: 59; } +g[data-y="60"] { --i: 60; } +g[data-y="61"] { --i: 61; } +g[data-y="62"] { --i: 62; } +g[data-y="63"] { --i: 63; } +g[data-y="64"] { --i: 64; } +g[data-y="65"] { --i: 65; } +g[data-y="66"] { --i: 66; } +g[data-y="67"] { --i: 67; } +g[data-y="68"] { --i: 68; } +g[data-y="69"] { --i: 69; } +g[data-y="70"] { --i: 70; } +g[data-y="71"] { --i: 71; } +g[data-y="72"] { --i: 72; } +g[data-y="73"] { --i: 73; } +g[data-y="74"] { --i: 74; } +g[data-y="75"] { --i: 75; } +g[data-y="76"] { --i: 76; } + +[data-x="0"] { --i: 0; } +[data-x="1"] { --i: 1; } +[data-x="2"] { --i: 2; } +[data-x="3"] { --i: 3; } +[data-x="4"] { --i: 4; } +[data-x="5"] { --i: 5; } +[data-x="6"] { --i: 6; } +[data-x="7"] { --i: 7; } +[data-x="8"] { --i: 8; } +[data-x="9"] { --i: 9; } +[data-x="10"] { --i: 10; } +[data-x="11"] { --i: 11; } +[data-x="12"] { --i: 12; } +[data-x="13"] { --i: 13; } +[data-x="14"] { --i: 14; } +[data-x="15"] { --i: 15; } +[data-x="16"] { --i: 16; } +[data-x="17"] { --i: 17; } +[data-x="18"] { --i: 18; } +[data-x="19"] { --i: 19; } +[data-x="20"] { --i: 20; } +[data-x="21"] { --i: 21; } +[data-x="22"] { --i: 22; } +[data-x="23"] { --i: 23; } +[data-x="24"] { --i: 24; } +[data-x="25"] { --i: 25; } +[data-x="26"] { --i: 26; } +[data-x="27"] { --i: 27; } +[data-x="28"] { --i: 28; } +[data-x="29"] { --i: 29; } +[data-x="30"] { --i: 30; } +[data-x="31"] { --i: 31; } +[data-x="32"] { --i: 32; } + +.buildings { + display: none; +} + +#test-arcs line, #test-arcs polyline { + stroke: black; + fill: none; +} + +#test-arcs rect, #test-arcs polygon { + fill: black; + fill-opacity: 0.2; +} diff --git a/public/assets/css/soldier_record_block.css b/public/assets/css/soldier_record_block.css new file mode 100644 index 0000000..fb1d322 --- /dev/null +++ b/public/assets/css/soldier_record_block.css @@ -0,0 +1,55 @@ +span { + font-size: smaller; + font-family: monospace; + margin-right: 1em; +} + +.physical-status-track { + text-align: center; +} + +.physical-status-track span { + margin: 0; + padding: 0; + display: inline-block; + vertical-align: middle; +} + +.physical-status-track span[slot="block-number"] { + font-family: serif; + font-size: unset; +} + +ul { + margin: 0; + padding: 0; +} + +ul li { + display: inline; + margin-left: 1em; +} + +p { + margin: 0; +} + +.grenades input { + display: none; +} + +.grenades svg { + width: 14px; + height: 14px; + vertical-align: bottom; +} + +.grenades svg circle { + fill: none; + stroke: black; + stroke-width: 2px; +} + +.grenades input:checked + svg circle { + fill: gray; +} diff --git a/public/assets/css/style.css b/public/assets/css/style.css new file mode 100644 index 0000000..a973630 --- /dev/null +++ b/public/assets/css/style.css @@ -0,0 +1,411 @@ +body { + margin: 0; + display: flex; + overflow: hidden; +} + +#map-container { + flex-basis: 100%; + position: relative; + height: 100vh; +} + +svg, object { + background-color: darkgray; + width: 100%; + height: 100%; +} + +object { + opacity: 0; + transition: opacity 0.25s; +} + +svg image { + image-rendering: pixelated; +} + +svg image.map-scans { + image-rendering: auto; +} + +svg text { + user-select: none; +} + +div#status { + position: absolute; + bottom: 0; + right: 0; + margin: 3px; + display: none; + user-select: none; +} + +#hex-counter { + padding: 2px; + background-color: rgba(255, 255, 255, 0.5); + border-radius: 2px; +} + +#hex-count { + font-family: monospace; +} + +div#content { + display: flex; + border-left: 1px solid gray; + flex-basis: 0; + /* overflow: scroll; */ + max-height: 100vh; + flex-direction: column; + /* padding: 2px; */ + position: relative; +} + +#content > div:first-of-type { + padding: 2px; + border-bottom: 1px solid gray; +} + +#content #buttons { + line-height: 1.5em; +} + +#content input[type="checkbox"].visible { + position: absolute; + right: 0; +} + +#record-sheet { + /* max-height: 100%; */ + overflow-y: auto; + display: flex; + flex-direction: column; + /* display: none; */ + background-color: gray; +} + +#record-sheet .name { + text-transform: capitalize; +} + +#record-sheet > div { + /* padding: 0 2px; */ + overflow-y: auto; + /* border: 1px solid black; */ +} + +#record-sheet > div > p { + margin: 0; + margin-top: 0px; + margin-bottom: 1px; + padding: 6px 2px; + background-color: lightgray; +} + +#record-sheet > div > div { + /* border: 1px solid black; */ + margin-bottom: 1px; + padding: 6px 4px; + /* border-radius: 4px; */ +} + +#record-sheet > div:last-of-type { + margin-top: 2px; +} + +#record-sheet > div > div:last-of-type { + margin-bottom: 0; +} + +svg > defs > #point { + fill: inherit; + fill-opacity: inherit; + stroke: inherit; + stroke-width: inherit; + stroke-opacity: inherit; +} + +use[href="#point"] { + opacity: 0; + fill: teal; + fill-opacity: 0.2; + stroke: black; + stroke-width: 0.5px; +} + +use[href="#point"]:hover, use[href="#point"].hover { + opacity: 1; + fill: orange; +} + +use[href="#point"].active { + opacity: 0.2; +} + +polyline.move-trace { + stroke: gray; + stroke-dasharray: 2; + fill: none; +} + +g#grid { + transform: translate(19px, 31px) scale(4); +} + +#background { + fill: #bacae3; +} + +#map2 { + transform-origin: 0px 0px; + transform: translate(-0.9px, -2.4px) scale(0.999, 1.007); +} + +#map3 { + transform-origin: 0px 0px; + /* transform: translateY(1518px); */ + transform: translate(1.3px, 1564.1px) rotate(0.1deg) scale(0.999, 1.002); +} + +#panel { + display: none; + position: absolute; + right: 0; + background-color: white; + border: 1px solid black; + padding: 2px; +} + +#panel fieldset label { + display: block; + text-align: right; +} + +#toggle-firing-arc-vis { + position: absolute; + right: 0; + padding-top: 20px; +} + +#toggle-firing-arc-vis div { + margin-top: 10px; + writing-mode: vertical-lr; + transform: rotate(180deg); +} + +#counter-base { + r: inherit; +} + +g.troop-counter-template, g.troop-counter-template use { + r: inherit; +} + +g.troop-counter, g.troop-counter use { + r: inherit; +} + +g.troop-counter-template text { + fill: white; + font-size: 12px; + font-weight: bold; + font-family: monospace; + cursor: default; + text-anchor: middle; + pointer-events: none; + user-select: none; + transform: translateY(4px); + stroke: none; +} + +g.troop-counter [href="#counter-prone"] { + transform: translate(-5px, 6px); +} + +g#points g use.counter { + r: 5px; +} + +g#points g.hover use[href="#point"] { + opacity: 1; + fill: orange; +} + +g#points g.hover use.counter { + r: 7px; +} + +g#points use.clone { + stroke: white; + stroke-width: 0.5px; + stroke-dasharray: 1; +} + +g#points use[data-allegiance="defender"].clone { + fill: rgb(255, 126, 126); +} + +g#points use[data-allegiance="attacker"].clone { + fill: rgb(130, 190, 130); +} + +text.counter, #troop-counter text { + font-size: 12px; + font-weight: bold; + /* stroke: black; */ + fill: white; + /* stroke-width: 0.5px; */ + font-family: sans-serif; + cursor: default; + text-anchor: middle; + /* transform: translateY(25%); */ + transform: translateY(4px); + pointer-events: none; + user-select: none; +} + +polygon.firing-arc[data-allegiance="defender"] { + fill: red; +} + +polygon.firing-arc[data-allegiance="attacker"] { + fill: green; +} + +#shapes { + opacity: 0.1; +} + +#shapes polygon { + stroke: none; +} + +#lines polygon { + fill: none; + stroke: black; +} + +button.set-firing-arc img { + vertical-align: middle; + pointer-events: none; +} + +.sight-line { + stroke: orangered; + stroke-width: 0.5px; + pointer-events: none; +} + +.soldier-record { + display: inline-block; + position: relative; + white-space: nowrap; + background-color: white; +} + +.soldier-record[data-allegiance="attacker"] [slot="troop-number"] svg { + fill: green; +} + +.soldier-record[data-allegiance="defender"] [slot="troop-number"] svg { + fill: red; +} + +.soldier-record [slot="troop-number"] svg { + width: 20px; + height: 20px; + background-color: initial; + vertical-align: middle; +} + +.soldier-record [slot="troop-number"] svg text { + fill: white; + text-anchor: middle; + font-size: 10px; + font-weight: bold; + transform: translateY(3.5px); + font-family: monospace; +} + +.soldier-record[data-allegiance="defender"] [slot="troop-number"] img { + fill: red; +} + +.soldier-record[data-allegiance="attacker"] [slot="troop-number"] img { + fill: green; +} + +.soldier-record.selected { + background-color: khaki; +} + +.soldier-record.movement-ended { + background-color: none; + opacity: 0.5; +} + +.wall { + fill: none; + stroke: red; + stroke-width: 7px; + opacity: 0.7; +} + +#asterisk { + font-size: 30; +} + +img.logo { + width: 100px; + margin: 0 auto; + display: block; +} + +#turn-count[data-update="0"] span.inning-bottom { + display: none; +} + +#turn-count[data-update="1"] span.inning-top { + display: none; +} + +#map-dialog { + border: 1px solid black; +} + +.map-placeholder { + position: absolute; +} + +@media (width >= 1800px) { + #record-sheet { + flex-direction: row; + /* gap: 2px; */ + } + + #record-sheet > div > p { + margin-top: 0; + } + + #record-sheet > div { + /* max-height: unset; */ + overflow-y: unset; + height: min-content; + } + + #record-sheet div:last-of-type { + margin-top: 0; + } + + #record-sheet > div:first-of-type > div { + /* margin-left: 1px; */ + margin-right: 1px; + } + + #record-sheet > div:last-of-type > div { + margin-left: 1px; + /* margin-right: 1px; */ + } +} -- cgit v1.2.3