
:root {
  --map-scale: 1.0;
}


#map
{
    width: calc(1200px * var(--map-scale));
    height: calc(929px * var(--map-scale));
    background: url(/static/map-1200-2.png);
}

#metro_canvas.faded
{
    opacity: 0.8;
    filter: gray; /* IE6-9 */
    -webkit-filter: grayscale(1); /* Google Chrome, Safari 6+ & Opera 15+ */
    filter: grayscale(1); /* Microsoft Edge and Firefox 35+ */
}

.hidden
{
    /* !important because this loads before Bootstrap's CSS in default.hbs - without it,
       Bootstrap's same-specificity ".btn { display: inline-block }" wins the cascade on any
       hidden button (e.g. #btnEditMode) purely by loading later, regardless of this class. */
    display: none !important;
}

.node
{
    position: absolute;
    font-size: 18px;
    width: 30px;
    height: 30px;
    text-align: center;
    vertical-align: center;
}


.metro_station
{
    position: absolute;
    font-size: 18px;
    width: 24px;
    height: 24px;
    text-align: center;
    vertical-align: center;
}

/* edit mode only: flags every non-anchor station that's still on its auto-computed position (no
   saved override) so it's easy to spot-check the auto-layout's output at a glance. Excludes
   .selected explicitly so clicking a flagged station still shows the blue selection ring. */
body.edit_mode_active .metro_station:not(.transfer):not(.overridden):not(.selected) i.status
{
    outline: 3px solid red;
    outline-offset: 2px;
    border-radius: 50%;
}

.metro_station.selected i.status
{
    outline: 3px solid #2980b9;
    outline-offset: 2px;
    border-radius: 50%;
}

.metro_station label
{
    cursor: pointer;
    white-space: nowrap;
    position: absolute;
    font-weight: 900;
    font-size: 15px;
    font-family: 'Roboto', sans-serif;
    transform-origin: 0 0;
}

.metro_station label:hover
{
    color: #2980b9;
}

.metro_station label.e 
{
    left: 28px;
    top: 0;
}
.metro_station.transfer label.e 
{
    left: 36px;
}


.metro_station label.w
{
    right: 30px;
    top: 0;
}

.metro_station label.ne 
{
    left: 16px;
    bottom: 0px;
    transform: rotate(-45deg);
}

.metro_station.transfer label.ne
{
    left: 20px;
    bottom: 5px;
}



.metro_station label.n
{
    left: 0px;
    bottom: 0px;
    transform: rotate(-90deg);
}

.metro_station label.s
{
    left: 0px;
    top: 24px;
    padding-top: 4px;
    writing-mode: vertical-rl;
    text-orientation: sideways;
}


.metro_station label.sw
{
    right: 2px;
    top: 85px;
    transform: rotate(-45deg);
    text-align: right;
    width: 100px;
}

.metro_station.transfer label.sw
{
    right: 6px;
    top: 95px;
}

.metro_station label.se
{
    left: 30px;
    top: 16px;
    transform: rotate(45deg);
}
.metro_station.transfer label.se
{
    left: 42px;
    top: 18px;
}

.metro_station label.nw
{
    right: -12px;
    bottom: 75px;
    transform: rotate(45deg);
    text-align: right;
    width: 100px;
}
.metro_station.transfer label.nw
{
    right: 6px;
    bottom: 95px;
}

.usip_icon
{
    width: 16px;
    height: 16px;
}

td.i 
{
    width: 16px;
}


i.transferbg
{
    display: none;
    font-family: "Font Awesome 5 Free";
    font-style: normal;
    font-variant-caps:normal;
    font-weight:900;
    text-rendering:auto;
    color:white;
    -webkit-text-stroke-width: 5px;
    -webkit-text-stroke-color: black;
    cursor: pointer;
    font-size: 36px;
    position: absolute;
    z-index: 4;
}

/* true geometric centering (half its own rendered size, via transform) instead of a hand-tuned
   pixel offset - guarantees it's concentric with i.status below regardless of either icon's
   font-size. Scoped to .metro_station only - i.status/i.transferbg are reused unscoped for the
   small status dot in the host-details popup table, where this absolute/centered positioning
   would (and did) break that in-flow layout instead. */
.metro_station i.transferbg
{
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

i.transferbg:before{
    content: "\f111";
}

.metro_station.transfer i.transferbg
{
    display: inline-block;
}


i.status
{
    display: inline-block;
    font-family: "Font Awesome 5 Free";
    font-style: normal;
    font-variant-caps:normal;
    font-weight:900;
    text-rendering:auto;
    color: grey;
    -webkit-text-stroke-width: 5px;
    -webkit-text-stroke-color: black;
    cursor: pointer;
    position:relative;
    z-index: 10;
}

/* true geometric centering within the station dot's own 24x24 box - see the matching
   .metro_station i.transferbg comment above. Scoped to .metro_station only: i.status is reused
   unscoped for the small in-flow status dot in the host-details popup table, where absolute
   centering would (and did) break that layout instead. */
.metro_station i.status
{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

i.status:hover
{
    text-shadow: 0 0 15px #000;
    /*-webkit-text-stroke-color:#2980b9;*/

}

.modal i.status {

    text-shadow: 0 0 5px #000;
    -webkit-text-stroke-width: 2px;
    animation: none !important;
    cursor: auto;
}

i.status.up
{
    color: lime;
}

i.status.warn
{
    color:yellow;
    animation: blinker 1s linear infinite;
}

@keyframes blinker {
  50% {
    opacity: 0.25;
  }
}

i.status.down
{
    animation: blinker 1s linear infinite;
    color:red;
}

i.status.unknown
{
    color:gray;
}


i.status:before{
    content: "\f111";
}

#logo
{
    position:absolute;
    bottom: 200px;
    right: 300px;
    opacity: 0.2;
    z-index:-1;
}

#error
{
    position:absolute;
    top: 720px;
    left: 700px;
    width: 400px;
    text-align: center;
}

#metro_legend
{
    display: flex;
    flex-wrap: wrap;
    gap: 8px 20px;
    padding: 16px 8px;
}

.metro_legend_entry
{
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: 'Roboto', sans-serif;
    font-size: 14px;
}

.metro_legend_swatch
{
    display: inline-block;
    width: 20px;
    height: 8px;
    border-radius: 4px;
}