main { background-color: dimgray; } #roles { background-color: gray; } header { background-color: silver; } header.your_turn { background-color: orange; } #role_York .role_name { background-color: whitesmoke; } #role_Lancaster .role_name { background-color: salmon; } #turn_info { background-color: gainsboro; } .role_held { float: right; } #log { background-color: whitesmoke; } #log .h1 { font-weight: bold; padding-top:2px; padding-bottom:2px; text-align: center; } #log .h2 { padding-top:2px; padding-bottom:2px; text-align: center; } #log .h3 { text-align: center; } #log .h4 { text-decoration: underline; } #log .h5 { text-decoration: underline; } #log .h1 { background-color: hsl(0,0%,80%); } #log div { padding-left: 20px; text-indent: -12px; } #log div.i { padding-left: 32px; text-indent: -12px; } #log div.ii { padding-left: 44px; text-indent: -12px; } #log .card_tip { font-style: italic; } #log .card_tip:hover { text-decoration: underline; } #log .lord_tip:hover { cursor: pointer; text-decoration: underline; } #log .locale_tip:hover { cursor: pointer; text-decoration: underline; } #log .way_tip:hover { cursor: pointer; text-decoration: underline; } .action { cursor: pointer; } #log { font-variant-numeric: tabular-nums; } /* PANELS */ .panel { min-width: 1350px; max-width: 1350px; margin: 12px auto 36px auto; background-color: #555; } .panel_header { background-color: #444; color: white; user-select: none; font-weight: bold; text-align: center; padding: 3px 1em; } .panel_body { display: flex; justify-content: center; flex-wrap: wrap; padding: 18px; gap: 18px; } .court_panel { max-width: fit-content; } .court_body { gap: 24px; } /* ARTS OF WAR */ #arts_of_war_list { min-height: 260px; } /* PLAN */ #plan { min-height: 260px; } #plan_actions { background-color: #444; min-height: 130px; } #plan_actions.hide { display: none } #plan_actions .card { width: 93px; height: 130px; background-size: 93px 130px; } body.York #plan_actions .york { display: none } body.Lancaster #plan_actions .lancaster { display: none } /* BATTLE GRID WITH LORD MATS */ #battle_grid { display: grid; grid-template-columns: auto auto auto; margin: 0 auto; justify-content: center; padding: 18px; } #battle_grid .grid_array { width: 376px; height: 506px; padding: 36px 12px 12px 12px; } #battle_grid #grid_ga { height: auto; } .grid_array { background-repeat: no-repeat } .grid_array.action { background-image: url(images/battle_array_action.svg); background-position: top center; } #battle_grid { background-repeat: no-repeat; } #battle_grid.attacker { } #battle_header { grid-row: 1; grid-column: 1 / 4; } .defender .att, .attacker .def, .defender .att .unit, .attacker .def .unit, .defender .att .asset, .attacker .def .asset, .defender .att .service_marker, .attacker .def .service_marker, .defender .att .moved_fought, .attacker .def .moved_fought, .defender .att .feed_x2, .attacker .def .feed_x2 { transform: rotate(180deg) } .defender .att .background, .attacker .def .background { border-color: #b1a05f #f2e19d #f2e19d #b1a05f; box-shadow: 0 0 0 1px #584800, -1px -2px 4px #0008; } .defender #grid_a1 { grid-row: 1; grid-column: 1; } .defender #grid_a2 { grid-row: 1; grid-column: 2; } .defender #grid_a3 { grid-row: 1; grid-column: 3; } .defender #grid_ga { grid-row: 2; grid-column: 2; } .defender #grid_d1 { grid-row: 3; grid-column: 1; } .defender #grid_d2 { grid-row: 3; grid-column: 2; } .defender #grid_d3 { grid-row: 3; grid-column: 3; } .attacker #grid_a1 { grid-row: 6; grid-column: 3; } .attacker #grid_a2 { grid-row: 6; grid-column: 2; } .attacker #grid_a3 { grid-row: 6; grid-column: 1; } .attacker #grid_ga { grid-row: 5; grid-column: 2; } .attacker #grid_d1 { grid-row: 4; grid-column: 3; } .attacker #grid_d2 { grid-row: 4; grid-column: 2; } .attacker #grid_d3 { grid-row: 4; grid-column: 1; } .defender #pursuit.rotate, .attacker #pursuit:not(.rotate) { transform: rotate(180deg); border-color: #a68c61 #e7cb9e #e7cb9e #a68c61; box-shadow: 0 0 0 1px #4e370a, -1px -2px 4px #0008; } #pursuit { margin: 15px auto; } .siegeworks { display: flex; flex-wrap: wrap; justify-content: center; gap: 4px; margin: 12px; } .siegeworks:empty { display: none } #garrison { background-image: url(images/garrison.svg); background-repeat: no-repeat; background-position: center; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; width: 376px; height: 80px; gap: 2px; margin: 0 auto; } #garrison.action { background-image: url(images/garrison_action.svg); } #garrison.hide { display: none } #garrison .unit { position: static } /* MATS */ .mat { position: relative; width: 376px; height: 506px; z-index: 1; } .mat .background { position: absolute; width: 372px; height: 372px; border-radius: 12px; border-width: 2px; border-style: solid; background-color: #d1c07e; background-position: center; background-size: 360px 360px; background-repeat: no-repeat; z-index: 4; } #battle_grid .mat.ambushed .background { filter: grayscale(50%) } .court_body .mat.hidden .background { filter: grayscale(100%) } .mat.command .background { box-shadow: 0 0 0 1px #584800, 0 0 0 3px gold; } .mat.selected .background { box-shadow: 0 0 0 1px #584800, 0 0 0 4px yellow; } .mat .capabilities { position: absolute; width: 372px; height: 260px; z-index: 2; top: 246px; left: 2px; display: flex; flex-wrap: wrap; justify-content: center; gap: 0px; } .mat .events { position: absolute; z-index: 3; width: 372px; height: 260px; left: 2px; top: -36px; display: flex; flex-wrap: wrap; justify-content: center; gap: 0px; transition-property: top; transition-duration: 100ms; } .mat .events:hover { top: -130px; } .mat .events:empty { display: none; } .mat .moved_fought, .mat .feed_x2 { position: absolute; z-index: 5; } .mat .feed_x2 { left: 8px; top: 164px; } .mat .moved_fought.one { right: 72px; top: 12px; } .mat .moved_fought.two { right: 66px; top: 6px; } body.shift .capabilities, body.shift .events, body.shift #capabilities1, body.shift #capabilities2 { z-index: 200; } .mat .forces, .mat .routed, .mat .assets { position: absolute; display: flex; flex-wrap: wrap; justify-content: start; justify-items: center; align-content: center; align-items: center; gap: 4px 6px; z-index: 5; //background-color: #f004; } .mat > .background > div { //outline: 1px solid red; } .mat .forces { justify-content: center; } .mat .forces, .mat .routed { gap: 2px; } .mat .ready_vassals { position: absolute; z-index: 6; } .mat .mustered_vassals { position: absolute; z-index: 5; } body.shift .mustered_vassals { display: block; } .mat .ready_vassals .service_marker, .mat .mustered_vassals .service_marker { transition: margin 100ms; margin-top: -24px; } .mat .ready_vassals:hover .service_marker, .mat .mustered_vassals:hover .service_marker { margin-top: 1px; } .mat .mustered_vassals .service_marker { margin-top: -38px; } .mat .shield { position: absolute; background-repeat: no-repeat; } .mat.teutonic .shield { top: 10px; left: 6px; width: 75px; height: 85px; border-radius: 0 0 50% 50%; filter: drop-shadow(0 0 4px white); } .mat.russian .shield, .mat.yaroslav .shield { top: 6px; left: 7px; width: 63px; height: 125px; border-radius: 30px 30px 50% 50%; filter: drop-shadow(0 0 3px white); } .mat.teutonic .shield.action { background-image: url(images/shield_teutonic.svg); filter: drop-shadow(0 0 3px white); } .mat.russian .shield.action, .mat.yaroslav .shield.action { background-image: url(images/shield_russian.svg); filter: drop-shadow(0 0 3px white); } .mat .forces { top: 96px; left: 66px; width: 240px; height: 96px; } .mat .routed { top: 200px; left: 18px; width: 236px; height: 48px; } .mat .assets { top: 255px; left: 24px; width: 230px; height: 96px; } .mat .ready_vassals { bottom: 22px; right: 22px; width: 94px; } .mat .mustered_vassals { bottom: 134px; right: 6px; width: 94px; } .mat.teutonic.andreas .background { background-image:url(mats.1x/mat_teutonic_andreas-fs8.png) } .mat.teutonic.heinrich .background { background-image:url(mats.1x/mat_teutonic_heinrich-fs8.png) } .mat.teutonic.hermann .background { background-image:url(mats.1x/mat_teutonic_hermann-fs8.png) } .mat.teutonic.knud_and_abel .background { background-image:url(mats.1x/mat_teutonic_knud_and_abel-fs8.png) } .mat.teutonic.rudolf .background { background-image:url(mats.1x/mat_teutonic_rudolf-fs8.png) } .mat.teutonic.yaroslav .background { background-image:url(mats.1x/mat_teutonic_yaroslav-fs8.png) } .mat.russian.aleksandr .background { background-image:url(mats.1x/mat_russian_aleksandr-fs8.png) } .mat.russian.andrey .background { background-image:url(mats.1x/mat_russian_andrey-fs8.png) } .mat.russian.domash .background { background-image:url(mats.1x/mat_russian_domash-fs8.png) } .mat.russian.gavrilo .background { background-image:url(mats.1x/mat_russian_gavrilo-fs8.png) } .mat.russian.karelians .background { background-image:url(mats.1x/mat_russian_karelians-fs8.png) } .mat.russian.vladislav .background { background-image:url(mats.1x/mat_russian_vladislav-fs8.png) } @media (min-resolution: 97dpi) { .mat.teutonic.andreas .background { background-image:url(mats.2x/mat_teutonic_andreas-fs8.png) } .mat.teutonic.heinrich .background { background-image:url(mats.2x/mat_teutonic_heinrich-fs8.png) } .mat.teutonic.hermann .background { background-image:url(mats.2x/mat_teutonic_hermann-fs8.png) } .mat.teutonic.knud_and_abel .background { background-image:url(mats.2x/mat_teutonic_knud_and_abel-fs8.png) } .mat.teutonic.rudolf .background { background-image:url(mats.2x/mat_teutonic_rudolf-fs8.png) } .mat.teutonic.yaroslav .background { background-image:url(mats.2x/mat_teutonic_yaroslav-fs8.png) } .mat.russian.aleksandr .background { background-image:url(mats.2x/mat_russian_aleksandr-fs8.png) } .mat.russian.andrey .background { background-image:url(mats.2x/mat_russian_andrey-fs8.png) } .mat.russian.domash .background { background-image:url(mats.2x/mat_russian_domash-fs8.png) } .mat.russian.gavrilo .background { background-image:url(mats.2x/mat_russian_gavrilo-fs8.png) } .mat.russian.karelians .background { background-image:url(mats.2x/mat_russian_karelians-fs8.png) } .mat.russian.vladislav .background { background-image:url(mats.2x/mat_russian_vladislav-fs8.png) } } .locale_markers > .conquered + .conquered { margin-left: -44px; margin-bottom: 13px; } .locale_markers > .conquered + .conquered + .conquered { margin-bottom: 26px; } .locale_markers > .conquered + .conquered + .conquered + .conquered { margin-bottom: 39px; } .locale_markers .siege + .siege { margin-left: -44px; margin-bottom: 13px; } .locale_markers .siege + .siege + .siege { margin-bottom: 26px; } .locale_markers .siege + .siege + .siege + .siege { margin-bottom: 39px; } /* TUCKED CARDS */ .tuck_under_map { margin: 0 auto 36px auto; width: 1350px; min-height: 260px; margin-top: -130px; display: grid; grid-template-columns: auto auto; } #capabilities1, #capabilities2 { display: flex; flex-wrap: wrap; gap: 12px; } #capabilities1 { margin-left: 24px; justify-content: start; } #capabilities2 { margin-right: 24px; justify-content: end; } /* ASSETS */ .asset { width: 42px; height: 42px; background-size: cover; border: 2px solid transparent; border-radius: 8px; box-shadow: 0 0 0 1px #444, 0 1px 4px #0008; } .asset.action { box-shadow: 0 0 0 1px #444, 0 0 0 4px white !important; } .asset.selected { box-shadow: 0 0 0 1px #444, 0 0 0 4px yellow !important; } .asset.cart.x1 { background-image: url(images/asset_cart_x1.png); } .asset.cart.x2 { background-image: url(images/asset_cart_x2.png) } .asset.cart.x4 { background-image: url(images/asset_cart_x4.png) } .asset.coin.x1 { background-image: url(images/asset_coin_x1.png); } .asset.coin.x2 { background-image: url(images/asset_coin_x2.png) } .asset.coin.x3 { background-image: url(images/asset_coin_x3.png) } .asset.coin.x4 { background-image: url(images/asset_coin_x4.png) } .asset.prov.x1 { background-image: url(images/asset_prov_x1.png); } .asset.prov.x2 { background-image: url(images/asset_prov_x2.png) } .asset.prov.x3 { background-image: url(images/asset_prov_x3.png) } .asset.prov.x4 { background-image: url(images/asset_prov_x4.png) } .asset.ship.x1 { background-image: url(images/asset_ship_x1.png); } .asset.ship.x2 { background-image: url(images/asset_ship_x2.png) } .asset.ship.x4 { background-image: url(images/asset_ship_x4.png) } .marker { border: 2px solid aqua; border-radius: 8px; background-size: cover; background-position: center; background-repeat: no-repeat; } .marker.square { width: 42px; height: 42px; } .marker.small { width: 36px; height: 36px; border-radius: 6px; } .marker.rectangle { width: 90px; height: 42px; } .marker.circle { width: 51px; height: 51px; background-size: 51px 51px; border-radius: 50%; } .marker.turn.levy { background-image: url(images/marker_levy.png) } .marker.turn.campaign { background-image: url(images/marker_campaign.png) } .marker.storm { background-image: url(images/marker_storm.png) } .marker.battle { background-image: url(images/marker_battle.png) } .marker.conquered.teutonic { background-image: url(images/marker_conquered_teutonic.png) } .marker.conquered.russian { background-image: url(images/marker_conquered_russian.png) } .marker.ravaged.teutonic { background-image: url(images/marker_ravaged_teutonic.png) } .marker.ravaged.russian { background-image: url(images/marker_ravaged_russian.png) } .marker.siege.teutonic { background-image: url(images/marker_siege_teutonic.png) } .marker.siege.russian { background-image: url(images/marker_siege_russian.png) } .marker.enemy_lords_removed.teutonic { background-image: url(images/marker_enemy_lords_removed_teutonic.png) } .marker.enemy_lords_removed.russian { background-image: url(images/marker_enemy_lords_removed_russian.png) } .marker.victory.teutonic { background-image: url(images/marker_victory_teutonic.png) } .marker.victory.russian { background-image: url(images/marker_victory_russian.png) } .marker.victory.half.teutonic { background-image: url(images/marker_victory_half_teutonic.png) } .marker.victory.half.russian { background-image: url(images/marker_victory_half_russian.png) } .marker.pursuit.teutonic { background-image: url(images/marker_pursuit_teutonic.png) } .marker.pursuit.russian { background-image: url(images/marker_pursuit_russian.png) } .marker.castle.russian { background-image: url(images/marker_castle_russian.png) } .marker.castle.teutonic { background-image: url(images/marker_castle_teutonic.png) } .marker.walls { background-image: url(images/marker_walls.a.png) } .marker.moved_fought { background-image: url(images/marker_moved_fought.png) } .marker.feed_x2 { background-image: url(images/almoravid_marker_feed_x2.png) } .marker.number.teutonic.n1 { background-image: url(images/marker_1_teutonic.png) } .marker.number.teutonic.n2 { background-image: url(images/marker_2_teutonic.png) } .marker.number.teutonic.n3 { background-image: url(images/marker_3_teutonic.png) } .marker.number.teutonic.n4 { background-image: url(images/marker_4_teutonic.png) } .marker.number.teutonic.n5 { background-image: url(images/marker_5_teutonic.png) } .marker.number.teutonic.n6 { background-image: url(images/marker_6_teutonic.png) } .marker.number.russian.n1 { background-image: url(images/marker_1_russian.png) } .marker.number.russian.n2 { background-image: url(images/marker_2_russian.png) } .marker.number.russian.n3 { background-image: url(images/marker_3_russian.png) } .marker.number.russian.n4 { background-image: url(images/marker_4_russian.png) } .marker.number.russian.n5 { background-image: url(images/marker_5_russian.png) } .marker.number.russian.n6 { background-image: url(images/marker_6_russian.png) } /* UNITS */ .unit { background-size: contain; background-repeat: no-repeat; filter: drop-shadow(0px 2px 2px #0004); } .unit.action { filter: drop-shadow(2px 0px 0px white) drop-shadow(0px 2px 0px white) drop-shadow(0px -2px 0px white) drop-shadow(-2px 0px 0px white); } .unit.knights, .unit.sergeants, .unit.light_horse, .unit.asiatic_horse { width: 30px; height: 35px; } .unit.men_at_arms, .unit.militia, .unit.serfs { width: 43px; height: 35px; } .unit.knights { background-image: url(images/unit_knights.svg) } .unit.sergeants { background-image: url(images/unit_sergeants.svg) } .unit.light_horse { background-image: url(images/unit_light_horse.svg) } .unit.asiatic_horse { background-image: url(images/unit_asiatic_horse.svg) } .unit.men_at_arms { background-image: url(images/unit_men_at_arms.svg) } .unit.militia { background-image: url(images/unit_militia.svg) } .unit.serfs { background-image: url(images/unit_serfs.svg) } /* CARDS */ .hand { margin: 24px auto; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; min-height: 260px; max-width: 1350px; gap: 16px; } .card { background-size: 186px 260px; width: 186px; height: 260px; border-radius: 8px; transition: 100ms; } .card_info { border-bottom: 1px solid black; } .card_info .card { margin: 12px auto; } .card.disabled { filter: brightness(80%); } .card.action.teutonic { background-color: #e1e6e8; box-shadow: 0 0 0 1px #666a6c, 0 0 0 4px white; } .card.action.russian { background-color: #e1d6c1; box-shadow: 0 0 0 1px #665c4a, 0 0 0 4px white; } .card.selected.teutonic { background-color: #e1e6e8; box-shadow: 0 0 0 1px #666a6c, 0 0 0 4px yellow; } .card.selected.russian { background-color: #e1d6c1; box-shadow: 0 0 0 1px #665c4a, 0 0 0 4px yellow; } /* MAP */ #mapwrap { width: 1350px; height: 1725px; box-shadow: 0px 1px 10px #0008; z-index: 3; } #map { background-repeat: no-repeat; background-size: cover; width: 1350px; height: 1725px; overflow: clip; } #map { background-image: url(map75.png) } @media (min-resolution: 97dpi) { #map { background-image: url(map150.png) } } .box { position: absolute; border: 3px solid gray; } .box.victory { border-radius: 50%; } .box.turn { border-radius: 50%; } .box.calendar.end { background-color: #8886; } .box.calendar.action { border-color: white; background-color: #fff6; } .locale { box-sizing: border-box; position: absolute; border: 3px solid gray; } .locale.town { border-radius: 24px 24px 0 0 } .locale.city { border-radius: 18px 18px 0 0 } .locale.fortress { border-radius: 0 0 0 0 } .locale.calais { border-radius: 0 0 0 0 } .locale.sea { border-radius: 50% } .locale.exile { border-radius: 0 0 50% 50% } .locale.action { border-color: white; box-shadow: 0 0 4px white; } .locale.action.laden { border-color: white; box-shadow: 0 0 0 3px indianred; background-color: #cd5c5c66 } .locale.supply_path { border-color: indianred; background-color: #cd5c5c66; } .locale.supply_source { border-color: seagreen; background-color: #2e8b5766; } .locale.supply_source.action { border-color: white; background-color: #2e8b5766; box-shadow: 0 0 0 3px seagreen; } .locale.tip { background-color: #ff08; box-shadow: 0 0 8px #ff08; } .locale_markers { position: absolute; pointer-events: none; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 4px; } #vp2.stack:not(.half) ~ #vp1.stack:not(.half) { transform: translate(0px,-36px); } #vp2.stack.half ~ #vp1.stack.half { transform: translate(0px,-36px); } #vp2.stack.half ~ #vp1.stack:not(.half) { transform: translate(-12px,-30px); } #vp2.stack:not(.half) ~ #vp1.stack.half { transform: translate(12px,-30px); } .marker.victory, .marker.turn { position: absolute; } /* TODO: update to match calendar track */ .v0 { top: 132px; left: 2px; } .v1, .v2, .v3, .v4, .v5, .v6, .v7, .v8, .t1, .t2, .t3, .t4, .t5, .t6, .t7, .t8 { top: 46px } .v9, .v10, .v11, .v12, .v13, .v14, .v15, .v16, .t9, .t10, .t11, .t12, .t13, .t14, .t15, .t16 { top: 284px } .v1, .v9 { left: 44px } .v2, .v10 { left: 196px } .v3, .v11 { left: 362px } .v4, .v12 { left: 514px } .v5, .v13 { left: 680px } .v6, .v14 { left: 832px } .v7, .v15 { left: 999px } .v8, .v16 { left: 1151px } .t1, .t9 { left: 100px } .t2, .t10 { left: 252px } .t3, .t11 { left: 418px } .t4, .t12 { left: 570px } .t5, .t13 { left: 737px } .t6, .t14 { left: 888px } .t7, .t15 { left: 1055px } .t8, .t16 { left: 1207px } /* PIECES */ .cylinder, .marker { transition-property: top, left; transition-duration: 700ms; transition-timing-function: ease; } .cylinder { position: absolute; width: 44px; height: 48px; background-size: 44px 48px; filter: drop-shadow(0px 2px 4px #0004); } .cylinder.command { filter: drop-shadow(2px 0px 0px gold) drop-shadow(0px 2px 0px gold) drop-shadow(0px -2px 0px gold) drop-shadow(-2px 0px 0px gold); } .cylinder.action { filter: drop-shadow(2px 0px 0px white) drop-shadow(0px 2px 0px white) drop-shadow(0px -2px 0px white) drop-shadow(-2px 0px 0px white); } .cylinder.selected { filter: drop-shadow(2px 0px 0px yellow) drop-shadow(0px 2px 0px yellow) drop-shadow(0px -2px 0px yellow) drop-shadow(-2px 0px 0px yellow); } /* BACKGROUND COLORS AND BORDERS */ /* CARD IMAGES */ /* ULTRA-WIDE SCREEN LAYOUTS */ @media (min-width: 2800px) { main { display: grid; gap: 0 12px; } main { grid-template-columns: 0 1350px auto 0; } #sec_map { grid-row: 1; grid-column: 2 } #sec_battle { grid-row: 2; grid-column: 2 } #sec_lords { grid-row: 1 / 3; grid-column: 3 } } @media (min-width: 3200px) { main { grid-template-columns: 36px 1350px auto 0; } } @media (min-width: 4100px) { main { grid-template-columns: 0 1350px 1fr 1350px 0; } #sec_map { grid-row: 1; grid-column: 2 } #sec_lords { grid-row: 1; grid-column: 3 } #sec_battle { grid-row: 1; grid-column: 4 } }