mirror of
https://github.com/wavelog/wavelog
synced 2026-08-13 18:41:16 -04:00
2404 lines
No EOL
53 KiB
CSS
2404 lines
No EOL
53 KiB
CSS
@font-face {
|
||
font-family: 'JetBrains Mono';
|
||
src: url('../fonts/JetBrainsMono/JetBrainsMono-Regular.woff2') format('woff2');
|
||
font-weight: 400;
|
||
font-style: normal;
|
||
font-display: swap;
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'JetBrains Mono';
|
||
src: url('../fonts/JetBrainsMono/JetBrainsMono-Bold.woff2') format('woff2');
|
||
font-weight: 700;
|
||
font-style: normal;
|
||
font-display: swap;
|
||
}
|
||
|
||
.callsign {
|
||
font-family: 'JetBrains Mono', 'Consolas', 'SF Mono', monospace;
|
||
font-variant-numeric: slashed-zero;
|
||
}
|
||
|
||
/* Callsign input fields — slashed-zero font while typing */
|
||
input[name="callsign"],
|
||
input[id="callsign"],
|
||
select[name="callsign"],
|
||
select[name="callsign"] option,
|
||
input[name="qsl_via"],
|
||
input[name$="_callsign"],
|
||
input[id^="dt-search-"] {
|
||
font-family: 'JetBrains Mono', 'Consolas', 'SF Mono', monospace;
|
||
font-variant-numeric: slashed-zero;
|
||
}
|
||
|
||
body {
|
||
font-family: "Twemoji Country Flags", "Helvetica", "Comic Sans", sans-serif;
|
||
}
|
||
|
||
@media (min-width: 992px) {
|
||
.modal-lg,
|
||
.modal-xl {
|
||
max-width: 900px;
|
||
}
|
||
|
||
#firstloginwizard_modal_content {
|
||
overflow-y: visible;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 991px) {
|
||
|
||
#firstloginwizard_modal_content {
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.h-lg-25 {
|
||
height: 25% !important;
|
||
}
|
||
|
||
.h-lg-50 {
|
||
height: 50% !important;
|
||
}
|
||
|
||
.h-lg-75 {
|
||
height: 75% !important;
|
||
}
|
||
|
||
.h-lg-100 {
|
||
height: 100% !important;
|
||
}
|
||
|
||
.h-lg-auto {
|
||
height: auto !important;
|
||
}
|
||
|
||
.w-lg-25 {
|
||
width: 25% !important;
|
||
}
|
||
|
||
.w-lg-50 {
|
||
width: 50% !important;
|
||
}
|
||
|
||
.w-lg-75 {
|
||
width: 75% !important;
|
||
}
|
||
|
||
.w-lg-100 {
|
||
width: 100% !important;
|
||
}
|
||
|
||
.w-lg-auto {
|
||
width: auto !important;
|
||
}
|
||
|
||
}
|
||
/* ============ HEADER MENU ============ */
|
||
/* Adapted from https://bootstrap-menu.com/detail-multilevel.html */
|
||
/* ============ desktop view ============ */
|
||
@media all and (min-width: 992px) {
|
||
|
||
.navbar-nav-left .dropdown-menu > li > a:hover:after {
|
||
transform: rotate(-90deg);
|
||
}
|
||
|
||
.navbar-nav-right .dropdown-menu > li > a:hover:after {
|
||
transform: rotate(90deg);
|
||
}
|
||
|
||
.header-dropdown li {
|
||
position: relative;
|
||
}
|
||
|
||
.nav-item .submenu {
|
||
display: none;
|
||
position: absolute;
|
||
left: 100%;
|
||
top: -7px;
|
||
}
|
||
|
||
.nav-item .submenu-left {
|
||
right: 100%;
|
||
left: auto;
|
||
}
|
||
|
||
.header-dropdown > li:hover > .submenu {
|
||
display: block;
|
||
}
|
||
|
||
.dropdown:hover > .header-dropdown {
|
||
display: block;
|
||
}
|
||
|
||
.dropdown > .header-dropdown {
|
||
display: none;
|
||
}
|
||
|
||
.navbar-nav-left {
|
||
flex-grow: 1;
|
||
}
|
||
|
||
.navbar-nav-right {
|
||
float: right;
|
||
}
|
||
|
||
.dropdown-menu-right {
|
||
right: 0 !important;
|
||
left: auto !important;
|
||
}
|
||
}
|
||
/* ============ desktop view .end// ============ */
|
||
|
||
/* ============ small devices ============ */
|
||
@media (max-width: 991px) {
|
||
|
||
.header-dropdown {
|
||
margin-left: 0.7rem;
|
||
margin-right: 0.7rem;
|
||
margin-bottom: 0.5rem;
|
||
}
|
||
|
||
.header-dropdown li {
|
||
position: relative;
|
||
}
|
||
|
||
.nav-item .submenu {
|
||
display: none;
|
||
position: absolute;
|
||
left: 30%;
|
||
top: -7px;
|
||
}
|
||
|
||
}
|
||
/* ============ small devices .end// ============ */
|
||
|
||
.modal-header {
|
||
display: initial;
|
||
}
|
||
|
||
.dropdown-menu {
|
||
z-index: 2000 !important;
|
||
position: absolute !important;
|
||
}
|
||
|
||
[hidden] {
|
||
display: none !important;
|
||
}
|
||
|
||
a {
|
||
text-decoration: none !important;
|
||
}
|
||
|
||
.main-nav .container {
|
||
margin-top: 0px !important;
|
||
}
|
||
|
||
#nav-container {
|
||
margin-top: 0;
|
||
position: sticky;
|
||
top: 0;
|
||
}
|
||
|
||
thead > tr > td {
|
||
position: sticky;
|
||
top: 45px;
|
||
}
|
||
|
||
.headerLogo {
|
||
width: 50px;
|
||
height: 50px;
|
||
}
|
||
|
||
.mainLogo {
|
||
width: 300px;
|
||
height: 300px;
|
||
}
|
||
|
||
.navbar {
|
||
--bs-navbar-padding-y: 0.25rem;
|
||
}
|
||
|
||
.dashboard {
|
||
padding-top: none;
|
||
}
|
||
|
||
.statistics {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
.statistics_custom {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
.notes {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
.eqsl {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
.publicsearch {
|
||
padding-top: 15px;
|
||
max-width: 540px;
|
||
}
|
||
|
||
.search {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
.logbook {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
.adif {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
.adif .alert p {
|
||
margin-bottom: 0rem;
|
||
}
|
||
|
||
.api .alert p {
|
||
margin-bottom: 0rem;
|
||
}
|
||
|
||
.qso_panel {
|
||
padding-top: 25px;
|
||
}
|
||
|
||
.qso_panel .iota_ref {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.qso_panel #sota_ref-selectized {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.qso_panel #wwff_ref-selectized {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.qso_panel #pota_ref-selectized {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.qso_panel #darc_dok-selectized {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.card-body #sota_ref_edit-selectized {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.card-body #wwff_ref_edit-selectized {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.card-body #pota_ref_edit-selectized {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.card-body #darc_dok_edit-selectized {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
#share_modal {
|
||
display: grid;
|
||
grid-template-columns: auto;
|
||
}
|
||
|
||
#oqrssearch:valid {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.confirmedGrid {
|
||
border-color: green;
|
||
}
|
||
|
||
.workedGrid {
|
||
border-color: yellow;
|
||
}
|
||
|
||
.newGrid {
|
||
border-color: red;
|
||
}
|
||
|
||
#country {
|
||
border: none;
|
||
}
|
||
|
||
TD.eqsl {
|
||
width: 33px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.eqsl-green {
|
||
color: #00a000 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.eqsl-red {
|
||
color: #f00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.eqsl-yellow {
|
||
color: #d39e00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.eqsl-grey {
|
||
color: #dddddd !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
TD.qsl {
|
||
width: 33px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.qsl-green {
|
||
color: #00a000 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.qsl-red {
|
||
color: #f00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.qsl-yellow {
|
||
color: #d39e00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.qsl-grey {
|
||
color: #dddddd !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
TD.clublog {
|
||
width: 33px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.clublog-green {
|
||
color: #00a000 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.clublog-yellow {
|
||
color: #d39e00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.clublog-red {
|
||
color: #f00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.clublog-grey {
|
||
color: #dddddd !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
TD.dcl {
|
||
width: 33px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.dcl-green {
|
||
color: #00a000 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.dcl-yellow {
|
||
color: #d39e00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.dcl-red {
|
||
color: #f00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
TD.qrz {
|
||
width: 33px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.qrz-green {
|
||
color: #00a000 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.qrz-red {
|
||
color: #f00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.qrz-yellow {
|
||
color: #d39e00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.qrz-grey {
|
||
color: #dddddd !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
TD.lotw {
|
||
width: 33px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.lotw-green {
|
||
color: #00a000 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.lotw-red {
|
||
color: #f00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.lotw-grey {
|
||
color: #dddddd !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.lotw-yellow {
|
||
color: #d39e00 !important;
|
||
font-size: 1.1em;
|
||
}
|
||
|
||
.qso-edit-box {
|
||
padding: 10px;
|
||
}
|
||
|
||
.previous-qsos .card-title {
|
||
margin-bottom: 0px;
|
||
}
|
||
|
||
.qso-map .card-title {
|
||
margin-bottom: 0px;
|
||
}
|
||
|
||
.qso-map {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.callsign-suggest {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.callsign-suggest .card-title {
|
||
margin-bottom: 0px;
|
||
}
|
||
|
||
.callsign-suggestions .scp-call {
|
||
display: inline-block;
|
||
margin: 0 4px 4px 0;
|
||
padding: 1px 5px;
|
||
cursor: pointer;
|
||
border-radius: 3px;
|
||
font-family: monospace;
|
||
}
|
||
|
||
.callsign-suggestions .scp-call:hover {
|
||
background: color-mix(in srgb, var(--bs-body-color) 12%, transparent);
|
||
}
|
||
|
||
.callsign-suggestions .scp-call .text-primary {
|
||
font-weight: bold;
|
||
}
|
||
|
||
#search_box #callsign {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
#nav-bar-search-input {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
#nav-bar-search-input::placeholder {
|
||
text-transform: none;
|
||
}
|
||
|
||
.settings {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
.settings-nav {
|
||
margin-bottom: 15px;
|
||
list-style: none;
|
||
background-color: #fff;
|
||
border: 1px solid #d1d5da;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
.settings-nav .nav-link {
|
||
list-style: none;
|
||
background-color: #fff;
|
||
border: 1px solid #d1d5da;
|
||
}
|
||
|
||
.settings-nav .nav-link:hover {
|
||
background-color: #e1e4e8;
|
||
}
|
||
|
||
/* QSL Card Management CSS */
|
||
|
||
.qsl_management {
|
||
padding-top: 15px;
|
||
}
|
||
|
||
/*
|
||
*
|
||
*
|
||
*/
|
||
.qso-map-new .card-header {
|
||
background: #0f2027;
|
||
/* fallback for old browsers */
|
||
background: -webkit-linear-gradient(to right, #2c5364, #203a43, #0f2027);
|
||
/* Chrome 10-25, Safari 5.1-6 */
|
||
background: linear-gradient(to right, #2c5364, #203a43, #0f2027);
|
||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
|
||
color: #ffffff;
|
||
}
|
||
|
||
/* Round bottom corners of callsign notes header when collapsed */
|
||
.callsign-notes .card-header {
|
||
border-radius: 0.25rem;
|
||
}
|
||
|
||
.callsign-notes .card-header[aria-expanded="true"] {
|
||
border-bottom-left-radius: 0;
|
||
border-bottom-right-radius: 0;
|
||
}
|
||
|
||
#myTab .nav-link {
|
||
padding: 8px !important;
|
||
}
|
||
|
||
#map {
|
||
z-index: 1;
|
||
}
|
||
|
||
#qsomap {
|
||
z-index: 1;
|
||
border-radius: 0.25rem;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.qso-map {
|
||
border-radius: 0.25rem;
|
||
overflow: hidden;
|
||
}
|
||
|
||
#create_station_profile .row {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
/*
|
||
* Debug CSS
|
||
*/
|
||
|
||
.card {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.modal-backdrop {
|
||
z-index: 1000 !important;
|
||
}
|
||
|
||
.was-map-dialog .modal-dialog {
|
||
width: 100%;
|
||
}
|
||
|
||
@media (min-width: 576px) {
|
||
.was-map-dialog .modal-dialog {
|
||
max-width: 73% !important;
|
||
}
|
||
}
|
||
|
||
/*
|
||
* Timepicker alignment
|
||
*/
|
||
.exportdatepicker {
|
||
padding-right: 0;
|
||
padding-left: 0;
|
||
}
|
||
|
||
.modal-body {
|
||
max-height: calc(100vh - 200px);
|
||
overflow-y: auto;
|
||
}
|
||
|
||
/* Station Logbooks Styles */
|
||
|
||
div#station_logbooks_table_length {
|
||
padding-top: 12px;
|
||
padding-left: 12px;
|
||
padding-bottom: 0px;
|
||
}
|
||
|
||
div#station_logbooks_table_filter {
|
||
padding-top: 12px;
|
||
padding-right: 12px;
|
||
padding-bottom: 0px;
|
||
}
|
||
|
||
div#station_logbooks_table_info {
|
||
padding-left: 12px;
|
||
}
|
||
|
||
div#station_logbooks_table_paginate {
|
||
padding-right: 12px;
|
||
padding-bottom: 12px;
|
||
}
|
||
|
||
div#station_logbooks_linked_table_length {
|
||
padding-top: 12px;
|
||
padding-left: 12px;
|
||
padding-bottom: 0px;
|
||
}
|
||
|
||
div#station_logbooks_linked_table_filter {
|
||
padding-top: 12px;
|
||
padding-left: 12px;
|
||
padding-bottom: 0px;
|
||
}
|
||
|
||
div#station_logbooks_linked_table_info {
|
||
padding-left: 12px;
|
||
}
|
||
|
||
div#station_logbooks_linked_table_paginate {
|
||
padding-right: 12px;
|
||
padding-bottom: 12px;
|
||
}
|
||
|
||
/* qrz.com profile picture Styles */
|
||
|
||
.card-title {
|
||
margin-bottom: 0px;
|
||
}
|
||
|
||
.callsign-image {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.callsign-image-content {
|
||
display: block;
|
||
max-height: 300px;
|
||
max-width: 75%;
|
||
text-align: center;
|
||
}
|
||
|
||
.callsign-image-pic {
|
||
max-height: 250px;
|
||
max-width: 100%;
|
||
border: 1px solid var(--bs-card-cap-bg);
|
||
border-radius: 0.375rem;
|
||
display: block;
|
||
}
|
||
|
||
#mapactivators {
|
||
height: calc(100vh - 380px) !important;
|
||
max-height: 900px !important;
|
||
}
|
||
|
||
.copy-icon {
|
||
display: block;
|
||
cursor: pointer;
|
||
padding-left: 0.5em;
|
||
}
|
||
|
||
.flash-copy {
|
||
animation-name: flash;
|
||
animation-timing-function: ease-out;
|
||
animation-duration: 1s;
|
||
}
|
||
|
||
@keyframes flash {
|
||
0% {
|
||
background: #28a745;
|
||
}
|
||
|
||
100% {
|
||
background: transparent;
|
||
}
|
||
}
|
||
|
||
.api-url {
|
||
font-family: Monospace;
|
||
}
|
||
|
||
.api-key {
|
||
font-family: Monospace;
|
||
}
|
||
|
||
.qso_panel .dxccsummary {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.qso_panel .dxccsummaryheader {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.table-striped tbody > tr.activeRow {
|
||
background-color: #5cb85c !important;
|
||
--bs-table-bg: none;
|
||
}
|
||
|
||
.border-top {
|
||
--bs-border-color: #dee2e6;
|
||
}
|
||
|
||
.activeRow a {
|
||
color: #fff;
|
||
}
|
||
|
||
.w-qsl {
|
||
max-height: calc(100vh - 270px);
|
||
overflow-y: auto;
|
||
}
|
||
|
||
#lotw_manual_results {
|
||
padding-top: 10px;
|
||
}
|
||
|
||
.lotw_info_yellow {
|
||
background-image: linear-gradient(to bottom, #3fb618, yellow);
|
||
}
|
||
|
||
.lotw_info_orange {
|
||
background-image: linear-gradient(to bottom, #3fb618, orange);
|
||
}
|
||
|
||
.lotw_info_red {
|
||
background-image: linear-gradient(to bottom, #3fb618, red);
|
||
}
|
||
|
||
.highcharts-strong {
|
||
font-weight: bold;
|
||
}
|
||
|
||
.highcharts-figure,
|
||
.highcharts-data-table table {
|
||
min-width: 320px;
|
||
max-width: 100%;
|
||
margin: 1em auto;
|
||
max-height: calc(100vh - 200px) !important;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.highcharts-data-table table {
|
||
font-family: Verdana, sans-serif;
|
||
border-collapse: collapse;
|
||
border: 1px solid #ebebeb;
|
||
margin: 10px auto;
|
||
text-align: center;
|
||
width: 100%;
|
||
max-width: 500px;
|
||
}
|
||
|
||
.highcharts-data-table caption {
|
||
padding: 1em 0;
|
||
font-size: 1.2em;
|
||
color: #555;
|
||
}
|
||
|
||
.highcharts-data-table th {
|
||
font-weight: 600;
|
||
padding: 0.5em;
|
||
}
|
||
|
||
.highcharts-data-table td,
|
||
.highcharts-data-table th,
|
||
.highcharts-data-table caption {
|
||
padding: 0.5em;
|
||
}
|
||
|
||
.highcharts-data-table thead tr,
|
||
.highcharts-data-table tr:nth-child(even) {
|
||
background: #f8f8f8;
|
||
}
|
||
|
||
.highcharts-data-table tr:hover {
|
||
background: #f1f7ff;
|
||
}
|
||
|
||
#radio_cat_state {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.previous-qsos table {
|
||
margin-bottom: 0px;
|
||
}
|
||
|
||
.lotw-cert-list table {
|
||
margin-bottom: 0px;
|
||
}
|
||
|
||
.qso_panel a i.fa.fa-star:hover {
|
||
color: #ffd700 !important;
|
||
}
|
||
|
||
#dx,
|
||
#state,
|
||
#gridsquare,
|
||
#sota,
|
||
#wwff,
|
||
#dok,
|
||
#pota {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
#dx::placeholder,
|
||
#state::placeholder,
|
||
#gridsquare::placeholder,
|
||
#sota::placeholder,
|
||
#wwff::placeholder,
|
||
#pota::placeholder {
|
||
text-transform: none;
|
||
}
|
||
|
||
#awardInfoButton {
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
#awardInfoButton h2 {
|
||
margin-right: 30px;
|
||
}
|
||
|
||
#simpleFleInfo {
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
#simpleFleInfo h2 {
|
||
margin-right: 30px;
|
||
}
|
||
|
||
@media (min-width: 768px) {
|
||
|
||
.sfletable.table {
|
||
width: 100%;
|
||
}
|
||
|
||
.sfletable.table thead,
|
||
.sfletable.table tbody tr {
|
||
display: block;
|
||
width: 100%;
|
||
table-layout: fixed;
|
||
display: inline-table;
|
||
}
|
||
|
||
.sfletable.table tbody {
|
||
width: 95%;
|
||
overflow-y: scroll;
|
||
position: absolute;
|
||
}
|
||
|
||
.simplefle {
|
||
--bs-card-bg: none;
|
||
}
|
||
|
||
#sfle_textarea {
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 767px) {
|
||
|
||
.sfletable.table {
|
||
overflow-x: auto;
|
||
font-size: 0.8em;
|
||
}
|
||
|
||
#refs_hint {
|
||
font-size: 0.8em;
|
||
}
|
||
}
|
||
|
||
.red {
|
||
color: var(--red);
|
||
}
|
||
|
||
.green {
|
||
color: var(--green);
|
||
}
|
||
|
||
.blue {
|
||
color: var(--indigo);
|
||
}
|
||
|
||
.gray {
|
||
color: var(--gray);
|
||
}
|
||
|
||
.orange {
|
||
color: var(--orange);
|
||
}
|
||
|
||
.qso_eqsl_qslmsg_update {
|
||
cursor: pointer;
|
||
margin-left: 10px;
|
||
}
|
||
|
||
.icon_selectBox {
|
||
position: relative;
|
||
}
|
||
|
||
.icon_selectBox_data {
|
||
display: none;
|
||
position: absolute;
|
||
z-index: 50;
|
||
left: initial;
|
||
border: 1px solid var(--bs-border-color);
|
||
padding: 5px;
|
||
top: initial;
|
||
background-color: var(--bs-card-bg);
|
||
color: var(--bs-body-color);
|
||
}
|
||
|
||
.icon_selectBox_data label {
|
||
display: block;
|
||
margin-bottom: 0px !important;
|
||
text-align: center;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.icon_selectBox_data label:hover {
|
||
background-color: var(--bs-primary);
|
||
}
|
||
|
||
.inputError {
|
||
border: 2px solid rgb(217, 83, 79);
|
||
}
|
||
|
||
table.dataTable thead th,
|
||
table.dataTable thead td,
|
||
table.dataTable tfoot th,
|
||
table.dataTable tfoot td {
|
||
text-align: center !important;
|
||
}
|
||
|
||
.table-responsive .dropdown-menu.notdisplay {
|
||
padding: 0px !important;
|
||
border: 0px !important;
|
||
}
|
||
|
||
#partial_view .table-responsive {
|
||
overflow-x: unset;
|
||
}
|
||
|
||
label {
|
||
margin-bottom: 0.25rem;
|
||
}
|
||
|
||
.btn-pwd-showhide,
|
||
.btn-pwd-showhide:hover,
|
||
.btn-included-on-field,
|
||
.btn-included-on-field:hover {
|
||
border: 1px solid var(--cl-border-btn-pwd);
|
||
cursor: pointer;
|
||
}
|
||
|
||
.dxccsummaryheader:after {
|
||
content: "\02795"; /* Unicode character for "plus" sign (+) */
|
||
float: right;
|
||
margin-left: 5px;
|
||
color: #000000;
|
||
background-image: linear-gradient(
|
||
to right,
|
||
white 0,
|
||
white 12ch,
|
||
black 12ch,
|
||
black 100%
|
||
);
|
||
-webkit-background-clip: text;
|
||
background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
-webkit-text-fill-color: transparent;
|
||
}
|
||
|
||
.dxccsummaryheaderopened:after {
|
||
content: "\2796"; /* Unicode character for "minus" sign (-) */
|
||
}
|
||
|
||
.coordinates {
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fill, 200px);
|
||
justify-content: center;
|
||
gap: 0 1rem;
|
||
}
|
||
|
||
.coord-pair {
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.coord-pair .text-success {
|
||
display: inline-block;
|
||
width: 120px;
|
||
}
|
||
|
||
.cohidden {
|
||
display:none;
|
||
}
|
||
|
||
@media (min-width: 1920px) {
|
||
.coordinates {
|
||
display: flex;
|
||
gap: 0 1rem;
|
||
}
|
||
#latDeg, #lngDeg {
|
||
width: 170px;
|
||
}
|
||
#locator, #distance, #bearing, #ituzonedisplay, #cqzonedisplay{
|
||
width: 120px;
|
||
}
|
||
}
|
||
|
||
.hamsatBgLin {
|
||
background-color: rgb(224 242 254) !important;
|
||
--bs-badge-color: rgb(2 132 199) !important;
|
||
}
|
||
|
||
.hamsatBgData {
|
||
background-color: rgb(250 232 255) !important;
|
||
--bs-badge-color: rgb(192 38 211) !important;
|
||
}
|
||
|
||
.hamsatBgFm {
|
||
background-color: rgb(254 243 199) !important;
|
||
--bs-badge-color: rgb(217 119 6) !important;
|
||
}
|
||
|
||
.spw-buttons {
|
||
--bs-btn-padding-x: 0.3rem;
|
||
--bs-btn-padding-y: 0.6rem;
|
||
display: none;
|
||
}
|
||
|
||
.quickswitcher.disabled {
|
||
--bs-dropdown-link-disabled-color: initial !important;
|
||
}
|
||
|
||
#station_logbooks_table tbody td, #station_locations_table tbody td, #user_contests_table tbody td {
|
||
text-align: center;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.table .editRow {
|
||
--bs-table-bg: none !important;
|
||
--bs-table-accent-bg: none !important;
|
||
}
|
||
|
||
/* Used in maps */
|
||
.legend {
|
||
padding: 6px 8px;
|
||
font: 14px Arial, Helvetica, sans-serif;
|
||
line-height: 24px;
|
||
color: rgb(255, 255, 255) !important;
|
||
border-color: #fff;
|
||
border-width: 1px;
|
||
border-style: solid;
|
||
border-radius: 10px;
|
||
background-color: rgb(52, 55, 56) !important;
|
||
}
|
||
.legend h4 {
|
||
text-align: center;
|
||
font-size: 16px;
|
||
margin: 2px 12px 8px;
|
||
color: rgb(255, 255, 255) !important;
|
||
}
|
||
.legend span {
|
||
position: relative;
|
||
bottom: 3px;
|
||
}
|
||
.legend i {
|
||
width: 18px;
|
||
height: 18px;
|
||
float: left;
|
||
margin: 0 8px 0 0;
|
||
}
|
||
|
||
/* Permanent region labels on the activation planner zone/state overlays */
|
||
.leaflet-tooltip.overlay-region-label {
|
||
background: rgba(0, 0, 0, 0.55);
|
||
border: none;
|
||
box-shadow: none;
|
||
color: #fff;
|
||
font-weight: 600;
|
||
font-size: 11px;
|
||
padding: 1px 5px;
|
||
border-radius: 3px;
|
||
max-width: 140px;
|
||
white-space: normal;
|
||
text-align: center;
|
||
}
|
||
.leaflet-tooltip.overlay-region-label::before {
|
||
display: none;
|
||
}
|
||
|
||
/* Dropdown toggle "active" state — any checkbox in the menu checked.
|
||
* Mirrors the advanced logbook filter button (.btn-filter-active). */
|
||
.btn-filter-active {
|
||
background-color: #ffc107 !important;
|
||
border-color: #ffc107 !important;
|
||
color: #000 !important;
|
||
}
|
||
.btn-filter-active:hover {
|
||
background-color: #e0a800 !important;
|
||
border-color: #e0a800 !important;
|
||
}
|
||
|
||
/* SOTA/POTA/WWFF reference popups (activation planner) */
|
||
.ref-popup { line-height: 1.4; min-width: 180px; padding-left: 10px; border-left: 5px solid #888; }
|
||
.ref-popup-top { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
|
||
.ref-popup-type {
|
||
display: inline-block;
|
||
font-size: 0.65rem;
|
||
font-weight: 700;
|
||
letter-spacing: 0.05em;
|
||
text-transform: uppercase;
|
||
color: #fff;
|
||
padding: 2px 8px;
|
||
border-radius: 9999px;
|
||
line-height: 1.3;
|
||
}
|
||
.ref-popup-ref { font-size: 1.1rem; font-weight: 700; line-height: 1.2; }
|
||
a.ref-popup-ref { color: inherit; text-decoration: none; }
|
||
a.ref-popup-ref:hover { text-decoration: underline; }
|
||
a.ref-popup-ref .fas { font-size: 0.7rem; opacity: 0.7; }
|
||
.ref-popup-name { font-weight: 600; margin-bottom: 6px; }
|
||
.ref-popup-row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
font-size: 0.85rem;
|
||
}
|
||
.ref-popup-row + .ref-popup-row { margin-top: 3px; }
|
||
.ref-popup-row .fas { width: 14px; text-align: center; opacity: 0.75; }
|
||
|
||
/* Coloured marker swatch in the activation planner Refs dropdown */
|
||
.ref-menu-dot {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 18px;
|
||
height: 18px;
|
||
border-radius: 50%;
|
||
flex-shrink: 0;
|
||
color: #fff;
|
||
font-size: 0.7rem;
|
||
font-weight: 700;
|
||
line-height: 1;
|
||
}
|
||
|
||
/* Reference map markers reuse the .ref-menu-dot swatch inside a divIcon */
|
||
.ref-map-icon { background: transparent; border: none; }
|
||
|
||
/* "Already activated" POTA marker: gold swatch with a check badge. */
|
||
.ref-menu-dot.is-activated { background: #ffd60a; color: #1f1f1f; position: relative; }
|
||
.ref-menu-dot.is-activated .ref-activated-check {
|
||
position: absolute;
|
||
right: -3px;
|
||
bottom: -3px;
|
||
font-size: 0.6rem;
|
||
color: #198754;
|
||
background: #fff;
|
||
border-radius: 50%;
|
||
padding: 1px;
|
||
line-height: 1;
|
||
}
|
||
.ref-popup-row.is-activated { color: #198754; font-weight: 600; }
|
||
.ref-popup-row.is-activated .fas { opacity: 1; color: #198754; }
|
||
|
||
/* IOTA tag labels (clickable) drawn at the centre of each rectangle overlay */
|
||
.iota-label {
|
||
background: rgba(23, 162, 184, 0.9);
|
||
color: #fff;
|
||
font-size: 9px;
|
||
font-weight: 700;
|
||
line-height: 14px;
|
||
text-align: center;
|
||
border-radius: 3px;
|
||
border: 1px solid rgba(255, 255, 255, 0.45);
|
||
white-space: nowrap;
|
||
cursor: pointer;
|
||
}
|
||
|
||
/* Blocking loading overlay for the activation planner map */
|
||
.gl-loading {
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
left: 0;
|
||
z-index: 1000;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
background: rgba(0, 0, 0, 0.35);
|
||
cursor: wait;
|
||
}
|
||
|
||
.info.leaflet-control {
|
||
padding: 6px 8px;
|
||
font: 14px/16px Arial, Helvetica, sans-serif;
|
||
box-shadow: 0 0 15px rgba(0,0,0,0.2);
|
||
border-radius: 5px;
|
||
background-color: rgb(52, 55, 56) !important;
|
||
color: rgb(255, 255, 255) !important;
|
||
border-color: #fff;
|
||
border-width: 1px;
|
||
border-style: solid;
|
||
}
|
||
.info h4 {
|
||
margin: 0 0 5px;
|
||
color: rgb(255, 255, 255) !important;
|
||
}
|
||
|
||
.leaflet-popup-content-wrapper {
|
||
background-color: rgb(52, 55, 56) !important;
|
||
color: rgb(255, 255, 255) !important;
|
||
border-color: #fff;
|
||
border-width: 1px;
|
||
border-style: solid;
|
||
}
|
||
|
||
.leaflet-popup-close-button {
|
||
color: rgb(255, 255, 255) !important;
|
||
}
|
||
|
||
.leaflet-popup-tip {
|
||
background-color: rgb(52, 55, 56) !important;
|
||
border-color: #fff;
|
||
border-width: 1px;
|
||
border-style: solid;
|
||
}
|
||
|
||
.lba-label {
|
||
background-color: rgb(52, 55, 56) !important;
|
||
color: rgb(255, 255, 255) !important;
|
||
border: 1px solid #fff; /* White border */
|
||
padding: 5px 8px;
|
||
border-radius: 5px;
|
||
}
|
||
|
||
/* Modify the tooltip's arrow (triangle) */
|
||
.lba-label::before {
|
||
border-bottom-color: rgb(52, 55, 56) !important; /* Triangle color (matches background) */
|
||
border-width: 6px; /* Keep same size */
|
||
}
|
||
|
||
/* Create a white border effect around the triangle */
|
||
.lba-label::after {
|
||
content: "";
|
||
position: absolute;
|
||
border-style: solid;
|
||
border-width: 0 8px 8px 8px; /* triangle pointing down */
|
||
border-color: transparent transparent white transparent; /* white bottom border */
|
||
top: -8px; /* place above the tooltip */
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
z-index: -1; /* optional: to place it behind */
|
||
}
|
||
|
||
|
||
.satellite-label {
|
||
background-color: rgb(52, 55, 56) !important;
|
||
color: rgb(255, 255, 255) !important;
|
||
border: 1px solid #fff; /* White border */
|
||
padding: 5px 8px;
|
||
border-radius: 5px;
|
||
}
|
||
|
||
/* Modify the tooltip's arrow (triangle) */
|
||
.satellite-label::before {
|
||
border-top-color: rgb(52, 55, 56) !important; /* Triangle color (matches background) */
|
||
border-width: 6px; /* Keep same size */
|
||
}
|
||
|
||
/* Create a white border effect around the triangle */
|
||
.satellite-label::after {
|
||
content: "";
|
||
position: absolute;
|
||
border-style: solid;
|
||
border-width: 8px; /* Slightly larger than ::before */
|
||
border-color: white transparent transparent transparent; /* White top border */
|
||
bottom: -16px; /* Match ::before position */
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
z-index: -1;
|
||
}
|
||
|
||
|
||
.blank-row {
|
||
height: 20px !important;
|
||
}
|
||
|
||
.uppercase {
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.tables-container {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 10px; /* Optional: add some space between tables */
|
||
justify-content: center;
|
||
overflow-x: auto; /* Enable horizontal scrolling if needed */
|
||
max-width: 100%; /* Ensure the container doesn't exceed the viewport width */
|
||
padding: 10px; /* Optional: add some padding */
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.table-wrapper {
|
||
flex: 1 1 400px; /* Adjust the base width of tables */
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.multiselect-container.dropdown-menu {
|
||
--bs-dropdown-padding-y: 0;
|
||
}
|
||
|
||
.btn-group .multiselect-container .multiselect-option input[type="radio"] {
|
||
display: none;
|
||
}
|
||
|
||
@media screen and (max-width:991px){
|
||
.multiselect-container button.dropdown-item {
|
||
pointer-events:none;
|
||
}
|
||
.multiselect-container span.form-check input {
|
||
pointer-events: all;
|
||
}
|
||
.multiselect-container span.form-check label {
|
||
pointer-events: none;
|
||
}
|
||
.btn-group .multiselect-container .multiselect-option input[type="radio"] {
|
||
display: block !important;
|
||
}
|
||
}
|
||
|
||
/* ============ Glanceyear ============ */
|
||
.glanceyear-container {
|
||
border: 1px solid #D8D8D8;
|
||
border-radius: 5px;
|
||
max-width: 683px;
|
||
}
|
||
.glanceyear-header {
|
||
position: relative;
|
||
background-color: #F5F5F5;
|
||
border-bottom: 1px solid #D8D8D8;
|
||
border-radius: 5px 5px 0 0;
|
||
color: #000;
|
||
font-size: 15px;
|
||
font-weight: bold;
|
||
margin: 0;
|
||
padding: 7px 10px;
|
||
}
|
||
.glanceyear-quantity {
|
||
position: absolute;
|
||
right: 10px;
|
||
top: 10px;
|
||
color:#aaa;
|
||
font-size: 10px;
|
||
}
|
||
.glanceyear-content { padding: 10px; }
|
||
.glanceyear-text {
|
||
color: #aaa;
|
||
font-size: 12px;
|
||
font-weight: normal;
|
||
margin: 0 0;
|
||
padding: 0;
|
||
}
|
||
.glanceyear-summary { color: #aaa; font-size: 12px; margin: 0 10px 10px; }
|
||
|
||
.glanceyear-legend {
|
||
color: #aaa;
|
||
float: right;
|
||
font-size: 12px;
|
||
text-align: middle;
|
||
text-wrap: none;
|
||
}
|
||
.glanceyear-legend span { display: inline-block; height: 10px; width: 10px; }
|
||
|
||
svg rect.day { fill: #eee; shape-rendering: crispedges; }
|
||
svg rect.day:hover { stroke: #aaa; stroke-width: 1px; }
|
||
svg rect.day[data-col] { fill: #3d9692; }
|
||
svg rect.day[data-col='1'] { fill: #c3dbda; }
|
||
svg rect.day[data-col='3'] { fill: #5caeaa; }
|
||
svg rect.day[data-col='6'] { fill: #277672; }
|
||
svg rect.day[data-col='12'] { fill: #176662; }
|
||
svg rect.day[data-col='24'] { fill: #075652; }
|
||
svg rect.day[data-col='48'] { fill: #004642; }
|
||
|
||
svg text { fill: #CCC; font-size: 9px; }
|
||
svg text.month { fill: #AAA; }
|
||
|
||
.svg-tag {
|
||
background-color: rgba(0,0,0,0.8);
|
||
border-radius: 3px;
|
||
color: #eee;
|
||
font-size: 12px;
|
||
line-height: 15px;
|
||
padding: 5px 15px;
|
||
position: absolute;
|
||
text-align: center;
|
||
}
|
||
.svg-tag:after {
|
||
border-color: rgba(0,0,0,0.8) transparent transparent transparent;
|
||
border-style: solid;
|
||
border-width: 5px 5px 0 5px;
|
||
bottom: -5px;
|
||
content: "";
|
||
height: 0;
|
||
left: 50%;
|
||
margin-left: -5px;
|
||
position: absolute;
|
||
width: 0;
|
||
}
|
||
|
||
.glanceyear-legend-1 {
|
||
background-color: #eee;
|
||
}
|
||
.glanceyear-legend-2 {
|
||
background-color: #c3dbda;
|
||
}
|
||
.glanceyear-legend-3 {
|
||
background-color: #5caeaa;
|
||
}
|
||
.glanceyear-legend-4 {
|
||
background-color: #277672;
|
||
}
|
||
|
||
.leaflet-popup-content {
|
||
font-family: "Twemoji Country Flags", sans-serif;
|
||
min-width: 260px; /* Minimum width to ensure readability */
|
||
}
|
||
|
||
.big-flag {
|
||
float: left;
|
||
font-size: 3em;
|
||
line-height: 1;
|
||
white-space: no-wrap;
|
||
display: flex;
|
||
align-items: center; /* Vertically aligns the flag and callsign */
|
||
gap: 0.5em; /* Adds space between the flag and callsign */
|
||
}
|
||
|
||
.sync-indicator {
|
||
display: none;
|
||
animation: blinker 2s linear infinite;
|
||
}
|
||
|
||
.sync-indicator.active {
|
||
display: inline;
|
||
}
|
||
|
||
@keyframes blinker {
|
||
50% {
|
||
opacity: 0;
|
||
}
|
||
}
|
||
|
||
.spacingcell {
|
||
background-color: transparent !important;
|
||
--bs-table-accent-bg: transparent !important;
|
||
border-top-style: none !important;
|
||
border-bottom-style: none !important;
|
||
border-right-style: none !important;
|
||
--dt-row-hover: transparent !important;
|
||
--dt-row-stripe: transparent !important;
|
||
}
|
||
|
||
/* Target the bootstrap-multiselect button */
|
||
.btn.dropdown-toggle.multiselect {
|
||
position: relative;
|
||
padding-right: 30px; /* room for arrow */
|
||
}
|
||
|
||
.qsl-gallery .waterfall-grid {
|
||
column-count: 4;
|
||
column-gap: 20px;
|
||
}
|
||
|
||
.qsl-gallery .waterfall-item {
|
||
break-inside: avoid;
|
||
margin-bottom: 20px;
|
||
display: inline-block;
|
||
width: 100%;
|
||
}
|
||
|
||
@media (max-width: 767px) {
|
||
.qsl-gallery .waterfall-grid {
|
||
column-count: 1;
|
||
}
|
||
}
|
||
|
||
@media (min-width: 768px) and (max-width: 991px) {
|
||
.qsl-gallery .waterfall-grid {
|
||
column-count: 2;
|
||
}
|
||
}
|
||
|
||
@media (min-width: 992px) and (max-width: 1199px) {
|
||
.qsl-gallery .waterfall-grid {
|
||
column-count: 3;
|
||
}
|
||
}
|
||
|
||
.qsl-gallery .card-img-container {
|
||
overflow: hidden;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
background-color: #f8f9fa;
|
||
}
|
||
|
||
.qsl-gallery .qsl-card-img {
|
||
object-fit: contain;
|
||
width: 100%;
|
||
cursor: pointer;
|
||
transition: transform 0.2s ease;
|
||
}
|
||
|
||
.qsl-gallery .qsl-card-img:hover {
|
||
transform: scale(1.03);
|
||
}
|
||
|
||
.qsl-gallery .card:hover {
|
||
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
|
||
}
|
||
|
||
.qsl-gallery .card {
|
||
display: flex;
|
||
flex-direction: column;
|
||
transition: box-shadow 0.3s ease;
|
||
}
|
||
|
||
.qsl-gallery .card-body {
|
||
flex-grow: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.legendClose {
|
||
float: right;
|
||
}
|
||
|
||
|
||
/* Ensure tooltip appears above everything */
|
||
.tooltip {
|
||
z-index: 9999 !important;
|
||
}
|
||
|
||
.qso_icons {
|
||
user-select: none;
|
||
}
|
||
|
||
.heatmap-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(24, minmax(0, 1fr));
|
||
gap: 2px;
|
||
max-width: 100%;
|
||
}
|
||
.heatmap-header {
|
||
text-align: center;
|
||
padding: 6px 4px;
|
||
}
|
||
.heatmap-row-label {
|
||
font-weight: 600;
|
||
padding: 8px 4px;
|
||
text-align: left;
|
||
font-size: 0.85rem;
|
||
}
|
||
.heatmap-cell {
|
||
text-align: center;
|
||
padding: 8px 4px;
|
||
border-radius: 3px;
|
||
border: 1px solid #d1d5da;
|
||
cursor: default;
|
||
color: #000;
|
||
}
|
||
.legend-item { display: inline-flex; align-items: center; gap: 4px; font-size: 0.8rem;}
|
||
.legend-swatch { width: 16px; height: 16px; border: 1px solid #d1d5da; border-radius: 3px; display: inline-block; }
|
||
|
||
.my-div-icon {
|
||
white-space: nowrap;
|
||
background: transparent !important;
|
||
border: none !important;
|
||
}
|
||
|
||
#gridsquare_map {
|
||
height: calc(100vh - 350px) !important;
|
||
}
|
||
|
||
.lbatable thead tr th:nth-child(1),
|
||
.lbatable tbody tr td:nth-child(1) {
|
||
padding-left: 10px !important;
|
||
display: flex !important;
|
||
justify-content: center !important;
|
||
align-items: center !important;
|
||
}
|
||
|
||
/* ===================================================================
|
||
QSL Postcard Designer
|
||
=================================================================== */
|
||
|
||
/* --- Toolbar --- */
|
||
.qsl-toolbar .qsl-tb-group {
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.qsl-tb-label {
|
||
font-size: .68rem;
|
||
text-transform: uppercase;
|
||
letter-spacing: .04em;
|
||
opacity: .65;
|
||
margin-bottom: .25rem;
|
||
}
|
||
|
||
/* --- Three-pane editor grid --- */
|
||
.qsl-editor {
|
||
display: grid;
|
||
grid-template-columns: 240px minmax(0, 1fr) 280px;
|
||
gap: 1rem;
|
||
align-items: start;
|
||
}
|
||
|
||
@media (max-width: 1199.98px) {
|
||
.qsl-editor {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
}
|
||
|
||
.qsl-pane {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
/* Right column stack (template options + properties) */
|
||
.qsl-right-stack {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1rem;
|
||
}
|
||
|
||
/* --- Palette (left) --- */
|
||
.qsl-palette .card-body {
|
||
max-height: 78vh;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.qsl-cat {
|
||
margin-bottom: .35rem;
|
||
}
|
||
|
||
.qsl-cat > summary {
|
||
cursor: pointer;
|
||
font-weight: 600;
|
||
font-size: .85rem;
|
||
padding: .3rem .4rem;
|
||
border-radius: 6px;
|
||
user-select: none;
|
||
}
|
||
|
||
.qsl-cat > summary:hover {
|
||
color: var(--bs-primary-text-emphasis);
|
||
background: var(--bs-primary-bg-subtle);
|
||
}
|
||
|
||
|
||
.qsl-cat-body {
|
||
padding: .35rem 0 .15rem .25rem;
|
||
}
|
||
|
||
.qsl_designer_field {
|
||
cursor: grab;
|
||
user-select: none;
|
||
padding: 5px 8px;
|
||
margin-bottom: 5px;
|
||
border: 1px solid var(--bs-border-color);
|
||
border-radius: 6px;
|
||
background: var(--bs-body-bg);
|
||
color: var(--bs-body-color);
|
||
font-family: monospace;
|
||
font-size: .8rem;
|
||
transition: background .12s, border-color .12s;
|
||
}
|
||
|
||
.qsl_designer_field:hover {
|
||
color: var(--bs-emphasis-color);
|
||
background: var(--bs-primary-bg-subtle);
|
||
}
|
||
|
||
.qsl_designer_field:active {
|
||
cursor: grabbing;
|
||
}
|
||
|
||
/* WYSIWYG ghost rows for "repeats per QSO" fields (non-interactive clones) */
|
||
.qsl_designer_ghost {
|
||
opacity: .35;
|
||
pointer-events: none;
|
||
}
|
||
|
||
/* --- Properties (right) --- */
|
||
.qsl-props .card-body {
|
||
max-height: 78vh;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
/* --- Canvas (center) --- */
|
||
.qsl-canvas .card-body {
|
||
background: var(--bs-tertiary-bg, #eef0f2);
|
||
}
|
||
|
||
#stageScroll {
|
||
overflow: auto;
|
||
max-height: 80vh;
|
||
padding: 14px;
|
||
}
|
||
|
||
#stageZoom {
|
||
width: 940px;
|
||
height: 640px;
|
||
}
|
||
|
||
#rulerWrap {
|
||
position: relative;
|
||
width: 940px;
|
||
height: 640px;
|
||
}
|
||
|
||
#rulerTop,
|
||
#rulerLeft {
|
||
position: absolute;
|
||
background: #e9ecef;
|
||
background: light-dark(#e9ecef, #343a40);
|
||
border: 1px solid #dee2e6;
|
||
border-color: light-dark(#dee2e6, #495057);
|
||
color: #212529;
|
||
color: light-dark(#212529, #e9ecef);
|
||
font-weight: 600;
|
||
}
|
||
|
||
#rulerTop {
|
||
left: 40px;
|
||
top: 0;
|
||
width: 900px;
|
||
height: 40px;
|
||
}
|
||
|
||
#rulerLeft {
|
||
left: 0;
|
||
top: 40px;
|
||
width: 40px;
|
||
height: 600px;
|
||
}
|
||
|
||
#stage {
|
||
position: absolute;
|
||
left: 40px;
|
||
top: 40px;
|
||
width: 900px;
|
||
height: 600px;
|
||
border: 1px solid var(--bs-border-color);
|
||
overflow: hidden;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
background-image:
|
||
linear-gradient(to right, rgba(0, 0, 0, .06) 1px, transparent 1px),
|
||
linear-gradient(to bottom, rgba(0, 0, 0, .06) 1px, transparent 1px);
|
||
background-size: 37.5px 37.5px;
|
||
background-color: #ffffff;
|
||
box-shadow: 0 2px 14px rgba(0, 0, 0, .2);
|
||
}
|
||
|
||
/* Ruler tick marks */
|
||
.ruler-tick-top {
|
||
position: absolute;
|
||
bottom: 0;
|
||
width: 1px;
|
||
background: #495057;
|
||
background: light-dark(#495057, #adb5bd);
|
||
}
|
||
|
||
.ruler-tick-top.major {
|
||
height: 18px;
|
||
}
|
||
|
||
.ruler-tick-top.minor {
|
||
height: 9px;
|
||
opacity: .55;
|
||
}
|
||
|
||
.ruler-tick-left {
|
||
position: absolute;
|
||
right: 0;
|
||
height: 1px;
|
||
background: #495057;
|
||
background: light-dark(#495057, #adb5bd);
|
||
}
|
||
|
||
.ruler-tick-left.major {
|
||
width: 18px;
|
||
}
|
||
|
||
.ruler-tick-left.minor {
|
||
width: 9px;
|
||
opacity: .55;
|
||
}
|
||
|
||
/* Ruler labels */
|
||
.ruler-label-top {
|
||
position: absolute;
|
||
top: 3px;
|
||
font-size: 10px;
|
||
line-height: 1;
|
||
color: #212529;
|
||
color: light-dark(#212529, #e9ecef);
|
||
background: transparent;
|
||
}
|
||
|
||
.ruler-label-left {
|
||
position: absolute;
|
||
right: 18px;
|
||
font-size: 10px;
|
||
line-height: 1;
|
||
color: #212529;
|
||
color: light-dark(#212529, #e9ecef);
|
||
background: transparent;
|
||
}
|
||
|
||
/* --- Placed elements (sit on the white postcard) --- */
|
||
.qsl_designer_placed {
|
||
position: absolute;
|
||
padding: 2px 5px;
|
||
border: 1px solid rgba(13, 110, 253, .5);
|
||
border-radius: 4px;
|
||
background: rgba(255, 255, 255, .92);
|
||
color: #111111;
|
||
font-weight: 600;
|
||
line-height: 1.25;
|
||
box-shadow: 0 1px 4px rgba(0, 0, 0, .15);
|
||
cursor: move;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.qsl_designer_placed:hover {
|
||
border-color: var(--bs-primary);
|
||
}
|
||
|
||
.qsl_designer_placed.selected {
|
||
border: 1px solid #ff7a00;
|
||
box-shadow: 0 0 0 2px rgba(255, 122, 0, .35);
|
||
z-index: 50;
|
||
}
|
||
|
||
/* --- Snapping guides --- */
|
||
.qsl-guide {
|
||
position: absolute;
|
||
pointer-events: none;
|
||
z-index: 60;
|
||
}
|
||
|
||
.qsl-guide-v {
|
||
top: 0;
|
||
width: 0;
|
||
height: 600px;
|
||
border-left: 1px dashed #ff3b8b;
|
||
}
|
||
|
||
.qsl-guide-h {
|
||
left: 0;
|
||
width: 900px;
|
||
height: 0;
|
||
border-top: 1px dashed #ff3b8b;
|
||
}
|
||
|
||
/* --- Marquee (rubber-band) selection --- */
|
||
.qsl-marquee {
|
||
position: absolute;
|
||
pointer-events: none;
|
||
z-index: 70;
|
||
border: 1px solid var(--bs-primary, #0d6efd);
|
||
background: rgba(13, 110, 253, .12);
|
||
}
|
||
|
||
/* --- Context menu --- */
|
||
.qsl-ctx-menu {
|
||
position: fixed;
|
||
z-index: 2000;
|
||
min-width: 184px;
|
||
padding: 4px;
|
||
background: var(--bs-body-bg);
|
||
border: 1px solid var(--bs-border-color);
|
||
border-radius: 8px;
|
||
box-shadow: 0 6px 24px rgba(0, 0, 0, .25);
|
||
}
|
||
|
||
.qsl-ctx-item {
|
||
display: flex;
|
||
align-items: center;
|
||
width: 100%;
|
||
padding: 6px 10px;
|
||
border: 0;
|
||
border-radius: 5px;
|
||
background: transparent;
|
||
color: var(--bs-body-color);
|
||
font-size: .85rem;
|
||
text-align: left;
|
||
}
|
||
|
||
.qsl-ctx-item:hover {
|
||
background: rgba(127, 127, 127, .15);
|
||
background: color-mix(in srgb, var(--bs-body-color) 50%, transparent);
|
||
}
|
||
|
||
.qsl-ctx-item.text-danger:hover {
|
||
background: rgba(220, 53, 69, .15);
|
||
background: color-mix(in srgb, var(--bs-danger) 50%, transparent);
|
||
}
|
||
|
||
.qsl-ctx-sep {
|
||
height: 1px;
|
||
margin: 4px 6px;
|
||
background: var(--bs-border-color);
|
||
}
|
||
|
||
/* Context submenu (align & distribute) */
|
||
.qsl-ctx-sub {
|
||
position: relative;
|
||
}
|
||
|
||
.qsl-ctx-submenu {
|
||
position: absolute;
|
||
left: 100%;
|
||
top: -5px;
|
||
display: none;
|
||
min-width: 232px;
|
||
margin-left: 2px;
|
||
padding: 4px;
|
||
background: var(--bs-body-bg);
|
||
border: 1px solid var(--bs-border-color);
|
||
border-radius: 8px;
|
||
box-shadow: 0 6px 24px rgba(0, 0, 0, .25);
|
||
}
|
||
|
||
.qsl-ctx-sub:hover > .qsl-ctx-submenu {
|
||
display: block;
|
||
}
|
||
|
||
/* ============================================================
|
||
Custom map tile styles (user-selectable; override active theme)
|
||
Body class = user_options map_custom.tile.style (see custom_map_style_helper).
|
||
map-follow = no override (active theme overrides.css wins).
|
||
Higher specificity (body.<slug>) beats the theme's bare .leaflet-tile.
|
||
============================================================ */
|
||
|
||
/* Follow active theme -- intentionally empty; theme overrides.css wins */
|
||
body.map-follow .leaflet-tile,
|
||
body.map-follow path.grid-rectangle,
|
||
body.map-follow span.grid-text > font,
|
||
body.map-follow span.grid-text-unworked > font,
|
||
body.map-follow span.grid-text-worked > font {}
|
||
|
||
/* --- Light looks: cosmo / default (+ _wide) -- no tile filter --- */
|
||
body.map-cosmo .leaflet-tile,
|
||
body.map-cosmo_wide .leaflet-tile,
|
||
body.map-default .leaflet-tile,
|
||
body.map-default_wide .leaflet-tile { filter: none !important; }
|
||
|
||
body.map-cosmo path.grid-rectangle,
|
||
body.map-cosmo_wide path.grid-rectangle,
|
||
body.map-default path.grid-rectangle,
|
||
body.map-default_wide path.grid-rectangle { stroke: rgba(97, 97, 97, 1); }
|
||
|
||
body.map-cosmo span.grid-text > font,
|
||
body.map-cosmo_wide span.grid-text > font,
|
||
body.map-default span.grid-text > font,
|
||
body.map-default_wide span.grid-text > font,
|
||
body.map-cosmo span.grid-text-unworked > font,
|
||
body.map-cosmo_wide span.grid-text-unworked > font,
|
||
body.map-default span.grid-text-unworked > font,
|
||
body.map-default_wide span.grid-text-unworked > font { color: rgb(97, 97, 97) !important; font-weight: 400 !important; }
|
||
|
||
body.map-cosmo span.grid-text-worked > font,
|
||
body.map-cosmo_wide span.grid-text-worked > font,
|
||
body.map-default span.grid-text-worked > font,
|
||
body.map-default_wide span.grid-text-worked > font { color: rgb(255, 255, 255) !important; font-weight: 400 !important; }
|
||
|
||
/* --- Dark looks: shared grid-text (identical across cyborg/darkly/superhero) --- */
|
||
body.map-cyborg path.grid-rectangle,
|
||
body.map-cyborg_wide path.grid-rectangle,
|
||
body.map-darkly path.grid-rectangle,
|
||
body.map-darkly_wide path.grid-rectangle,
|
||
body.map-superhero path.grid-rectangle,
|
||
body.map-superhero_wide path.grid-rectangle { stroke: rgba(200, 200, 200, 0.5); }
|
||
|
||
body.map-cyborg span.grid-text > font,
|
||
body.map-cyborg_wide span.grid-text > font,
|
||
body.map-darkly span.grid-text > font,
|
||
body.map-darkly_wide span.grid-text > font,
|
||
body.map-superhero span.grid-text > font,
|
||
body.map-superhero_wide span.grid-text > font,
|
||
body.map-cyborg span.grid-text-worked > font,
|
||
body.map-cyborg_wide span.grid-text-worked > font,
|
||
body.map-darkly span.grid-text-worked > font,
|
||
body.map-darkly_wide span.grid-text-worked > font,
|
||
body.map-superhero span.grid-text-worked > font,
|
||
body.map-superhero_wide span.grid-text-worked > font { color: rgba(255, 255, 255, 1) !important; font-weight: 400 !important; }
|
||
|
||
body.map-cyborg span.grid-text-unworked > font,
|
||
body.map-cyborg_wide span.grid-text-unworked > font,
|
||
body.map-darkly span.grid-text-unworked > font,
|
||
body.map-darkly_wide span.grid-text-unworked > font,
|
||
body.map-superhero span.grid-text-unworked > font,
|
||
body.map-superhero_wide span.grid-text-unworked > font { color: rgba(255, 255, 255, .4) !important; font-weight: 400 !important; }
|
||
|
||
/* Dark tile filters -- the only difference between dark looks */
|
||
body.map-cyborg .leaflet-tile,
|
||
body.map-cyborg_wide .leaflet-tile { filter: invert() hue-rotate(180deg) grayscale(0.8) !important; }
|
||
|
||
body.map-darkly .leaflet-tile,
|
||
body.map-darkly_wide .leaflet-tile { filter: invert() hue-rotate(180deg) grayscale(0.8) brightness(1.2) !important; }
|
||
|
||
body.map-superhero .leaflet-tile,
|
||
body.map-superhero_wide .leaflet-tile { filter: invert() hue-rotate(180deg) sepia(100%) hue-rotate(180deg) !important; }
|
||
|
||
/* --- Synthetic (non-theme) looks --- */
|
||
body.map-gray .leaflet-tile { filter: contrast(1.3) grayscale(0.8) !important; }
|
||
body.map-gray path.grid-rectangle { stroke: rgba(0, 0, 0, 0.09); }
|
||
body.map-gray span.grid-text > font { color: rgba(0, 0, 0, 0.09) !important; font-weight: 400 !important; }
|
||
body.map-gray span.grid-text-unworked > font { color: rgba(0, 0, 0, .4) !important; font-weight: 400 !important; }
|
||
body.map-gray span.grid-text-worked > font { color: rgba(0, 0, 0, 1) !important; font-weight: 400 !important; }
|
||
|
||
body.map-high-contrast .leaflet-tile { filter: saturate(2.2) grayscale(0.8) contrast(1.2) !important; }
|
||
body.map-high-contrast path.grid-rectangle { stroke: rgba(0, 0, 0, 0.2); }
|
||
body.map-high-contrast span.grid-text > font { color: rgba(0, 0, 0, 0.4) !important; font-weight: 400 !important; }
|
||
body.map-high-contrast span.grid-text-unworked > font { color: rgba(0, 0, 0, 0.2) !important; font-weight: 400 !important; }
|
||
body.map-high-contrast span.grid-text-worked > font { color: rgba(0, 0, 0, 0.4) !important; font-weight: 400 !important; }
|
||
|
||
/* ============================================================
|
||
Gridsquare Lookup (gridlookup view)
|
||
- Mobile toolbar: secondary controls collapse behind
|
||
"More options" on phones (xs); full inline toolbar on sm+.
|
||
- Compass-style grid-border readout: a Leaflet control
|
||
(top-right of the map) with the current square centred
|
||
and N/S/E/W neighbours around it.
|
||
============================================================ */
|
||
|
||
/* Mobile toolbar */
|
||
#glControls .gl-input { max-width: 150px; }
|
||
.gl-chevron {
|
||
display: inline-block;
|
||
width: .45em;
|
||
height: .45em;
|
||
margin-right: .4em;
|
||
vertical-align: middle;
|
||
border-right: 2px solid currentColor;
|
||
border-top: 2px solid currentColor;
|
||
transform: rotate(45deg); /* › points right when collapsed */
|
||
transition: transform .15s ease;
|
||
}
|
||
#glControls.gl-expanded .gl-chevron { transform: rotate(135deg); } /* ∨ points down when open */
|
||
#glControls:not(.gl-expanded) .gl-more-open,
|
||
#glControls.gl-expanded .gl-more-closed { display: none; }
|
||
#glControls .gl-refsrow { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
|
||
@media (max-width: 575.98px) {
|
||
#glControls:not(.gl-expanded) .gl-secondary { display: none !important; }
|
||
#glControls .gl-input { flex: 0 0 100%; max-width: 100%; }
|
||
#glControls .gl-refsrow { flex: 0 0 100%; }
|
||
.gl-more {
|
||
flex: 0 0 100%;
|
||
border-radius: 0;
|
||
text-align: left;
|
||
padding-left: 0;
|
||
}
|
||
}
|
||
|
||
/* Compass grid-border readout panel (Leaflet control). Neutral rgba tints
|
||
read on both light and dark themes; the nearest edge uses Bootstrap green. */
|
||
.gl-borders-control.leaflet-control {
|
||
position: relative;
|
||
padding: .5rem .6rem .6rem;
|
||
background: #000;
|
||
color: #fff;
|
||
border: 1px solid #fff;
|
||
border-radius: .55rem;
|
||
box-shadow: 0 2px 10px rgba(0, 0, 0, .22);
|
||
max-width: 21rem;
|
||
}
|
||
/* Dismiss button: top-right of the panel. White to match the title on the black panel. */
|
||
.gl-comp-close {
|
||
position: absolute; top: .2rem; right: .35rem;
|
||
background: transparent; border: 0; padding: .1rem .4rem;
|
||
color: #fff; font-size: 1.2rem; line-height: 1; cursor: pointer; opacity: .65;
|
||
}
|
||
.gl-comp-close:hover, .gl-comp-close:focus { opacity: 1; }
|
||
.gl-comp-title {
|
||
font-size: 16px;
|
||
margin: 2px 12px 8px;
|
||
color: rgb(255, 255, 255) !important;
|
||
}
|
||
.gl-compass {
|
||
display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
|
||
gap: .4rem; max-width: 30rem;
|
||
}
|
||
.gl-comp-edge, .gl-comp-center {
|
||
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
||
gap: .12rem; padding: .45rem .2rem; border-radius: .45rem;
|
||
text-align: center; min-height: 3.8rem;
|
||
}
|
||
.gl-comp-edge { background: rgba(127, 127, 127, .16); border: 1px solid rgba(127, 127, 127, .30); }
|
||
.gl-comp-center { border: 1px dashed rgba(127, 127, 127, .55); }
|
||
.gl-comp-edge.gl-comp-nearest { background: rgba(25, 135, 84, .16); border-color: #198754; }
|
||
.gl-comp-pin { font-size: .85rem; opacity: .85; } /* crosshairs icon inside the centre badge */
|
||
.gl-badge {
|
||
display: inline-flex; align-items: center; justify-content: center;
|
||
width: 1.5rem; height: 1.5rem; border-radius: 50%;
|
||
border: 1px solid currentColor; font-weight: 700; font-size: .62rem; line-height: 1; opacity: .85;
|
||
}
|
||
.gl-comp-edge.gl-comp-nearest .gl-badge { background: #198754; color: #fff; border-color: #198754; opacity: 1; }
|
||
.gl-comp-grid { font-weight: 700; font-size: .92rem; }
|
||
.gl-comp-center .gl-comp-grid { font-weight: 700;}
|
||
.gl-comp-meta { font-size: .70rem; }
|
||
@media (max-width: 359.98px) { /* let the meta line breathe on small phones */
|
||
.gl-comp-meta { font-size: .62rem; }
|
||
.gl-comp-edge, .gl-comp-center { padding: .35rem .1rem; }
|
||
}
|
||
|
||
/* On-map direction arrows (spokes + labeled tips) — the spatial alternative to
|
||
the corner compass; drawn at all sizes. Each tip centres on its border point. */
|
||
.gl-arrow-anchor { background: transparent; border: 0; }
|
||
.gl-arrow-tip {
|
||
transform: translate(-50%, -50%);
|
||
display: inline-flex; align-items: center; gap: .25rem; white-space: nowrap;
|
||
padding: 1px 6px; border-radius: 9px;
|
||
background: rgba(0, 0, 0, .72); color: #fff;
|
||
font-size: .70rem; font-weight: 600; line-height: 1.5;
|
||
border: 1px solid rgba(255, 255, 255, .45);
|
||
}
|
||
.gl-arrow-tip .gl-arrow-head { /* CSS triangle pointing north, rotated to the bearing */
|
||
display: inline-block; width: 0; height: 0;
|
||
border-left: 4px solid transparent; border-right: 4px solid transparent;
|
||
border-bottom: 6px solid currentColor;
|
||
}
|
||
.gl-arrow-tip.gl-arrow-near { background: #198754; border-color: #34c759; }
|
||
|
||
/* Selection info box above the map (grid, coordinates, zones, QRB). */
|
||
#glInfo {
|
||
margin: 0 0 0;
|
||
padding: .5rem .75rem;
|
||
background: rgba(127, 127, 127, .10);
|
||
border: 1px solid rgba(127, 127, 127, .25);
|
||
border-left: 3px solid #0d6efd;
|
||
border-radius: .45rem;
|
||
font-size: .85rem;
|
||
line-height: 1.6;
|
||
color: var(--bs-body-color);
|
||
}
|
||
#glInfo:empty { display: none; } /* no selection yet → no empty box */
|
||
#glInfo::before { /* leading info icon (FA6 circle-info) */
|
||
content: "\f05a";
|
||
font-family: "Font Awesome 6 Free", "Font Awesome 5 Free", "FontAwesome";
|
||
font-weight: 900;
|
||
color: #0d6efd;
|
||
margin-right: .45rem;
|
||
opacity: .9;
|
||
background: #fff;
|
||
border-radius: 50%;
|
||
}
|
||
#glInfo strong { /* gridsquare locator → high-contrast badge */
|
||
display: inline-block;
|
||
margin: 0 .1rem;
|
||
padding: 0 .4rem;
|
||
border-radius: .3rem;
|
||
background: #0d6efd;
|
||
color: #fff;
|
||
font-weight: 700;
|
||
font-size: .8rem;
|
||
line-height: 1.5;
|
||
vertical-align: baseline;
|
||
}
|
||
|
||
/* Collapsible top card-body — rotate the header chevron when collapsed. */
|
||
.gl-top-chevron { transition: transform .2s ease; }
|
||
[data-bs-target="#glTopBody"].collapsed .gl-top-chevron { transform: rotate(-180deg); }
|
||
|
||
/* "Locate me" active autotracking state: green button + pulsing icon. */
|
||
#glLocate.gl-tracking {
|
||
color: #fff;
|
||
background-color: #198754;
|
||
border-color: #198754;
|
||
}
|
||
#glLocate.gl-tracking .fa { animation: gl-pulse 1.5s ease-in-out infinite; }
|
||
@keyframes gl-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
|
||
|
||
/* Rich gridsquare popup (click marker + Go markers). */
|
||
.gl-popup { min-width: 320px; font-size: 1rem; line-height: 1.45; color: #fff; padding-left: 10px; border-left: 5px solid #dc3545; }
|
||
.gl-pop-head { margin-bottom: .4rem; }
|
||
.gl-pop-grid { margin-bottom: .35rem; white-space: nowrap; font-size: 2.0rem; font-weight: 900; letter-spacing: .02em;}
|
||
.gl-pop-flag { font-size: 2rem; margin-right: .2rem; }
|
||
.gl-pop-coords { display: flex; align-items: center; gap: .35rem; font-size: .95rem; opacity: .85; margin-bottom: .35rem; }
|
||
.gl-pop-coords .fa { opacity: .7; }
|
||
.gl-pop-hier { display: flex; flex-wrap: nowrap; gap: .6rem; margin-bottom: .35rem; font-size: .85rem; opacity: .9; }
|
||
.gl-pop-tier { display: inline-flex; align-items: center; gap: .28rem; }
|
||
.gl-dot { width: .6rem; height: .6rem; border-radius: 50%; display: inline-block; background: rgba(255, 255, 255, .35); flex: none; }
|
||
.gl-pop-tier.is-strong .gl-dot { background: #fff; }
|
||
.gl-pop-meta { margin-top: .3rem; font-size: .85rem; opacity: .75; }
|
||
.gl-pop-link { margin-top: .4rem; }
|
||
.gl-pop-link a { color: inherit; }
|
||
.gl-pop-link a:hover { text-decoration: underline !important; }
|
||
.gl-pop-link .fas { opacity: .75; margin-right: .25rem; }
|
||
|
||
/* Quick-action links at the foot of the gridsquare popup. */
|
||
.gl-pop-actions { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .4rem; padding-top: .4rem; border-top: 1px solid rgba(255, 255, 255, .25); }
|
||
.gl-pop-action { display: inline-flex; align-items: center; gap: .3rem; font-size: .8rem; padding: .15rem .5rem; border-radius: .3rem; background: rgba(255, 255, 255, .12); color: #fff; text-decoration: none; }
|
||
.gl-pop-action:hover { background: rgba(255, 255, 255, .22); }
|
||
|
||
/* POTA/SOTA/WWFF references found inside the clicked 6-char subsquare. */
|
||
.gl-pop-refs { margin-top: .4rem; padding-top: .4rem; border-top: 1px solid rgba(255, 255, 255, .25); }
|
||
.gl-pop-refs-title { font-size: .65rem; letter-spacing: .07em; text-transform: uppercase; opacity: .6; margin-bottom: .25rem; }
|
||
.gl-pop-ref-group { display: flex; flex-wrap: wrap; align-items: baseline; gap: .2rem .4rem; margin-bottom: .25rem; font-size: .8rem; }
|
||
.gl-pop-ref-type { display: inline-block; font-weight: 700; font-size: .65rem; padding: 0 .35rem; border-radius: .25rem; color: #fff; }
|
||
.gl-pop-ref-group.is-pota .gl-pop-ref-type { background: #238b45; }
|
||
.gl-pop-ref-group.is-sota .gl-pop-ref-type { background: #d95f0e; }
|
||
.gl-pop-ref-group.is-wwff .gl-pop-ref-type { background: #2b8cbe; }
|
||
.gl-pop-ref { line-height: 1.3; }
|
||
.gl-pop-ref-more { opacity: .6; }
|
||
/* Fixed column widths so every nearby-refs band table lines up. */
|
||
.gl-nearby-table { table-layout: fixed; width: 100%; }
|
||
|
||
/* Two-grid QRB: tone down every Maidenhead grid label so the two tinted
|
||
squares are the focus. Toggled via .gl-dim-labels on the map container. */
|
||
.gl-dim-labels .grid-text { opacity: .5; transition: opacity .25s ease; }
|
||
|
||
/* Map height: grows when the Search panel (#glTopBody) is collapsed. */
|
||
#glMap { height: calc(100vh - 350px); min-height: 400px; }
|
||
#glTopBody:not(.show) ~ #glMap { height: calc(100vh - 240px); }
|
||
|
||
/* Phones: the corner compass panel is too big, so rely on the on-map arrows. */
|
||
@media (max-width: 575.98px) {
|
||
.gl-borders-control.leaflet-control { display: none !important; }
|
||
.gl-coords-body { display: none !important; }
|
||
#glMap { height: calc(100vh - 390px); min-height: 300px; }
|
||
#glTopBody:not(.show) ~ #glMap { height: calc(100vh - 200px); }
|
||
}
|
||
|
||
/* ============================================================
|
||
AMSAT Satellite Status (application/views/amsatstatus)
|
||
Scoped under .amsat-status. Vivid status colors (green/amber/
|
||
blue/red); each cell's hue is reinforced by the icon+label
|
||
legend and the per-cell tooltip -- never color alone.
|
||
============================================================ */
|
||
.amsat-status {
|
||
--ams-heard: #22c55e;
|
||
--ams-gap: 2px;
|
||
--ams-name-w: 176px;
|
||
--ams-aos-w: 134px;
|
||
--ams-cell-w: 30px;
|
||
}
|
||
|
||
/* ---- KPI tiles ---- */
|
||
.amsat-kpis { display: flex; flex-wrap: wrap; gap: .75rem; margin-bottom: 1.25rem; }
|
||
.amsat-kpi {
|
||
flex: 1 1 150px;
|
||
min-width: 150px;
|
||
background-color: color-mix(in srgb, var(--bs-secondary-color, #6c757d) 7%, transparent);
|
||
border: 1px solid var(--bs-border-color, rgba(125,125,125,.18));
|
||
border-radius: .55rem;
|
||
padding: .6rem .85rem;
|
||
}
|
||
.amsat-kpi-val { font-size: 1.5rem; font-weight: 650; line-height: 1.1; color: var(--bs-body-color, inherit); }
|
||
.amsat-kpi-val small { font-size: .55em; font-weight: 500; color: var(--bs-secondary-color); }
|
||
.amsat-kpi-lbl { font-size: .7rem; text-transform: uppercase; letter-spacing: .04em; color: var(--bs-secondary-color); margin-top: .15rem; }
|
||
.amsat-kpi-sub { font-size: .72rem; color: var(--bs-secondary-color); }
|
||
|
||
/* ---- Legend (icon + label, never color alone) ---- */
|
||
.amsat-legend {
|
||
display: flex; flex-wrap: wrap; gap: .4rem 1rem; align-items: center;
|
||
margin-bottom: 1rem; font-size: .82rem; color: var(--bs-secondary-color);
|
||
}
|
||
.amsat-lgnd { display: inline-flex; align-items: center; gap: .4rem; }
|
||
.amsat-lgnd i { font-size: .85rem; }
|
||
|
||
/* ---- Heatmap table ---- */
|
||
.amsat-heat {
|
||
border-collapse: separate;
|
||
border-spacing: var(--ams-gap);
|
||
width: 100%;
|
||
margin: 0 0 .5rem; /* keep left/top at 0 so the sticky name column still aligns */
|
||
font-size: .82rem;
|
||
}
|
||
.amsat-heat th, .amsat-heat td {
|
||
background-color: var(--bs-card-bg, var(--bs-body-bg));
|
||
vertical-align: middle;
|
||
font-weight: bold;
|
||
}
|
||
.amsat-heat thead th {
|
||
position: sticky;
|
||
top: var(--ams-gap);
|
||
z-index: 2;
|
||
color: var(--bs-secondary-color);
|
||
padding: .35rem 0;
|
||
text-align: center;
|
||
}
|
||
/* Frozen satellite-name column */
|
||
.amsat-heat .h-name, .amsat-heat .c-name {
|
||
position: sticky; left: var(--ams-gap); z-index: 3;
|
||
width: var(--ams-name-w); min-width: var(--ams-name-w); max-width: var(--ams-name-w);
|
||
text-align: left; padding: .35rem .7rem; white-space: nowrap;
|
||
}
|
||
.amsat-heat thead .h-name { z-index: 5; }
|
||
/* Frozen next-AOS column */
|
||
.amsat-heat .h-aos, .amsat-heat .c-aos {
|
||
position: sticky; left: calc(var(--ams-name-w) + var(--ams-gap) * 2); z-index: 3;
|
||
width: var(--ams-aos-w); min-width: var(--ams-aos-w); max-width: var(--ams-aos-w);
|
||
text-align: left; padding: .35rem .5rem; white-space: nowrap;
|
||
}
|
||
.amsat-heat thead .h-aos { z-index: 5; }
|
||
|
||
.amsat-heat .c-name { font-weight: 600; }
|
||
.amsat-heat .c-name-txt { display: inline-block; max-width: 118px; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; }
|
||
.amsat-heat .c-name a { text-decoration: none; }
|
||
.amsat-heat .c-name a:hover { text-decoration: underline; }
|
||
.amsat-heat .c-name-cnt {
|
||
display: inline-block; min-width: 1.3em; text-align: center;
|
||
font-size: .68rem; font-weight: 600; color: var(--bs-secondary-color);
|
||
background-color: color-mix(in srgb, var(--bs-secondary-color, #6c757d) 14%, transparent);
|
||
border-radius: 999px; padding: 0 .35rem; margin-left: .35rem; vertical-align: middle;
|
||
}
|
||
.amsat-heat .c-aos-time { font-weight: 600; }
|
||
.amsat-heat .h-hr { width: var(--ams-cell-w); min-width: var(--ams-cell-w); }
|
||
.amsat-heat thead .h-hr[data-now] { color: var(--bs-body-color, inherit); font-weight: 700; }
|
||
|
||
/* Heatmap cells: status tint over the surface, lift to solid on hover */
|
||
.amsat-heat .cell {
|
||
width: var(--ams-cell-w); min-width: var(--ams-cell-w); height: 28px;
|
||
border-radius: 5px; cursor: help;
|
||
background-color: color-mix(in srgb, var(--bs-secondary-color, #6c757d) 25%, transparent);
|
||
}
|
||
.amsat-heat .cell[data-st] {
|
||
background-color: color-mix(in srgb, var(--cell) 82%, transparent);
|
||
}
|
||
.amsat-heat .cell[data-st]:hover {
|
||
background-color: var(--cell);
|
||
box-shadow: 0 2px 7px rgba(0,0,0,.22);
|
||
transform: translateY(-1px);
|
||
}
|
||
@media (hover: none) { .amsat-heat .cell[data-st]:hover { transform: none; } }
|
||
@media (prefers-reduced-motion: reduce) { .amsat-heat .cell[data-st]:hover { transform: none; } } |