digitransit-ui/app/component/itinerary/navigator/navigator.scss

847 lines
15 KiB
SCSS

.navi-start-container {
padding: 0 10px;
width: 100%;
button {
width: inherit;
display: flex;
flex-direction: row;
align-items: center;
background-color: $navigation-background-color;
margin: 4px 0 0 0;
padding: var(--space-m);
gap: var(--space-s);
font-weight: normal;
border-radius: $border-radius-bigger;
letter-spacing: $letter-spacing;
.content {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
gap: var(--space-s);
}
span.icon-container {
display: flex;
align-items: center;
justify-content: center;
:last-of-type {
margin-left: auto;
}
}
span.icon-container:last-of-type {
margin-left: auto;
}
}
.navigation-icon {
width: $navigation-icon-size;
height: $navigation-icon-size;
}
}
.bar {
border-radius: $border-radius;
}
.bold {
font-weight: $font-weight-medium;
}
.notification-header {
font-size: $font-size-normal;
font-weight: $font-weight-medium;
text-align: left;
margin-bottom: 4px;
}
.navi-header-chain {
display: block;
}
.navi-card-container {
position: fixed;
width: 100%;
padding: 0 var(--space-s);
svg.mode {
width: 32px;
height: 32px;
color: $black;
}
}
.navi-transfer-container {
display: inline-flex;
vertical-align: middle;
margin-bottom: 2px;
.navi-transfer {
display: flex;
flex-direction: row;
align-items: center;
.arrow-center {
.icon-container {
display: flex;
align-self: stretch;
height: 18px;
width: 14px;
.icon {
padding: 1px;
}
}
}
.bar {
height: 18px;
.route-number {
font-size: $font-size-xxsmall;
min-width: fit-content;
height: 18px;
display: inline-flex;
.vcenter-children {
display: flex;
align-items: center;
.vehicle-number-container-v {
display: flex;
.vehicle-number {
color: white;
padding: 0 8px 0 2px;
font-size: 15px;
line-height: 15px;
}
.special-icon {
.icon {
width: 16px;
height: 16px;
}
}
}
}
}
}
}
}
.route-info {
display: flex;
align-self: flex-start;
margin-bottom: var(--space-xs);
.expand {
margin-left: var(--space-m);
display: flex;
.icon {
margin-right: var(--space-s);
margin-top: 5px;
width: 16px;
height: 16px;
}
}
}
.extension-routenumber,
.route-info {
.route-number {
font-size: $font-size-xxsmall;
min-width: fit-content;
height: fit-content;
display: inline-flex;
vertical-align: middle;
.vcenter-children {
.vehicle-number {
color: white;
margin-top: 5px;
line-height: 24px;
}
display: flex;
}
.icon,
.special-icon {
height: 24px;
font-size: 24px;
}
.vehicle-number-container-v {
.vehicle-number {
margin: 0;
font-size: $font-size-normal;
padding: 0 var(--space-s) 0 var(--space-xxs);
line-height: 24px;
}
}
}
}
.boarding {
display: flex;
margin-top: 3px;
align-items: flex-start;
flex-direction: column;
&.with-icon {
margin-left: 40px;
.wait-duration {
margin-left: var(--space-l);
}
}
.headsign {
margin-left: var(--space-xs);
font-size: $font-size-small;
max-width: 85%;
text-align: left;
align-content: center;
line-height: 100%;
}
}
.compact-boarding {
display: flex;
margin-top: 3px;
align-items: flex-start;
flex-direction: row;
font-size: $font-size-xsmall;
font-weight: $font-weight-book;
.bar {
display: flex;
}
.route-number {
margin-top: 1px;
height: 16px;
.vcenter-children {
display: inline-flex;
align-self: stretch;
.special-icon {
font-size: $font-size-xsmall;
height: 18px;
.icon {
width: 16px;
height: 16px;
}
}
}
}
.wait-duration {
margin-left: var(--space-s);
}
}
.navi-top-card {
border-radius: var(--radius-m);
min-height: 70px;
color: $black;
background-color: white !important;
display: flex;
align-items: center;
letter-spacing: -0.3px;
box-shadow: 0 2px 4px 0 rgba(51, 51, 51, 0.2);
width: inherit;
cursor: default;
font-size: $font-size-normal;
font-weight: $font-weight-book;
z-index: 1;
.navi-top-card-arrow {
.inverted {
transform: rotate(180deg);
}
}
.main-card {
width: inherit;
margin: var(--space-m) var(--space-m);
.content {
display: flex;
flex-direction: row;
color: $black;
justify-content: center;
svg.mode {
margin-right: var(--space-s);
margin-top: 1px;
}
}
.instructions {
display: flex;
align-items: flex-start;
flex-direction: column;
width: 100%;
margin-right: var(--space-m);
&.expanded {
margin-bottom: 0;
}
.vehicle-leg {
display: flex;
text-align: left;
}
}
.duration {
&.fade-out {
animation: fadeOut 3s forwards;
}
font-size: $font-size-xsmall;
font-weight: $font-weight-book;
display: flex;
}
.extension {
flex-direction: column;
transition: all 0.4s ease;
overflow-y: hidden;
&.no-gap {
margin-top: 0;
margin-bottom: 0;
}
.extension-divider {
height: 1px;
background: #ddd;
width: 85%;
margin-left: 35px;
margin-top: var(--space-s);
margin-bottom: var(--space-s);
}
.stop-count {
display: flex;
margin-left: 35px;
.icon-container {
display: flex;
align-items: center;
.icon {
height: 16px;
width: 16px;
}
}
}
.extension-routenumber {
display: flex;
flex-direction: row;
margin-left: 40px;
margin-bottom: var(--space-s);
text-align: left;
margin-top: var(--space-m);
.bar {
border-radius: $border-radius;
}
.headsign {
display: flex;
flex-direction: column;
margin-left: var(--space-xs);
justify-content: center;
font-size: $font-size-small;
max-width: 85%;
line-height: 100%;
}
}
.extension-walk {
display: flex;
margin-left: var(--space-xl);
margin-bottom: var(--space-s);
margin-top: var(--space-xs);
}
.wait-in-vehicle {
display: flex;
align-items: flex-start;
text-align: start;
margin-left: var(--space-xl);
}
.wait-leg {
display: flex;
flex-direction: column;
align-items: flex-start;
margin-left: var(--space-m);
.icon {
margin-top: 2px;
height: 25px;
width: 25px;
}
}
.icon-expand {
margin-top: 5px;
width: 24px;
height: 24px;
}
.icon-expand-small {
margin-top: 5px;
width: 16px;
height: 16px;
margin-right: var(--space-s);
}
.destination-icon {
margin: 0 10px;
&.place {
fill: $to-color;
}
&.bus-stop {
color: $bus-color;
}
&.bus-express {
color: $bus-express-color;
}
&.speedtram {
color: $speedtram-color;
}
&.replacement-bus {
color: $replacement-bus-color;
}
&.tram-stop {
color: $tram-color;
}
&.subway-stop {
color: $metro-color;
}
&.rail-stop {
color: $rail-color;
}
&.ferry-stop {
color: $ferry-color;
}
&.ferry-external-stop {
color: $external-feed-color;
}
&.funicular-stop {
color: $funicular-color;
}
&.speedtram-stop {
color: $speedtram-color;
}
}
.destination {
text-align: left;
.details {
display: flex;
flex-direction: row;
align-items: center;
.address {
color: #888;
}
.platform-short {
width: unset;
font-family: $font-family;
font-size: $font-size-small;
letter-spacing: $letter-spacing;
display: inline-flex;
align-items: center;
.platform-number-wrapper {
padding: 0 var(--space-xxs);
height: 16px;
display: inline-flex;
justify-content: center;
align-items: center;
line-height: 13px;
font-size: 11px;
}
}
.zone-icon-container {
.circle {
width: 16px;
height: 16px;
font-size: 0.9rem;
padding: 0 2px 0 2px;
}
}
}
}
}
}
&.hide-card {
animation: hideTopCard $slide-up-down-animation;
pointer-events: none;
}
&.show-card {
animation: slideDownFromTop $slide-up-down-animation;
}
}
.navi-initializer-container {
position: fixed;
width: 100%;
padding: 0 var(--space-s);
display: flex;
flex-direction: column;
gap: var(--space-xxs);
font-weight: 325;
font-size: 14px;
line-height: 21px;
&.slide-out {
animation: slideUpToTop 1s ease-in-out forwards;
}
.navi-initializer-card {
display: flex;
flex-direction: column;
gap: var(--space-xxs);
align-items: center;
justify-content: center;
align-content: center;
flex-wrap: wrap;
background-color: white;
border-radius: var(--radius-m);
padding: var(--space-m);
box-shadow: 0 2px 4px 0 rgba(51, 51, 51, 0.2);
text-align: center;
&.success {
background-color: $success-color;
gap: var(--space-xs);
button {
color: white;
background-color: $realtime-color;
}
}
}
}
.navigator-modal-container {
position: fixed;
width: 100%;
bottom: 0;
left: 0;
z-index: 1000; // higher than navbar
display: flex;
flex-direction: row;
align-items: flex-end;
}
.navigator-modal-backdrop {
background-color: rgba(0, 0, 0, 0.2);
z-index: 999; // higher than navbar, below modal body
height: 100%;
}
.navigator-modal {
position: fixed;
background: white;
width: 100%;
border-radius: var(--radius-xl) var(--radius-xl) 0 0;
box-shadow: 0 -10px 10px 0 rgba(0, 52, 86, 0.1);
outline: none;
&.slide-in {
animation: slideUpFromBottom 0.5s ease-in-out;
}
}
.navigator-modal-content {
display: flex;
flex-direction: column;
padding: var(--space-xl) var(--space-l) var(--space-l) var(--space-l);
gap: var(--space-xl);
}
.info-stack {
position: relative;
letter-spacing: -0.3px;
width: inherit;
&.hide-card {
animation:
hideTopCard $slide-up-down-animation,
fadeOut $slide-up-down-fade;
pointer-events: none;
}
&.show-card {
animation:
slideDownFromTop $slide-up-down-animation,
fadeIn $slide-up-down-fade;
}
.info-stack-item {
position: relative;
border-radius: 8px;
display: flex;
align-items: center;
padding: 16px;
box-shadow: 0 2px 4px 0 rgba(51, 51, 51, 0.2);
font-size: $font-size-xsmall;
font-weight: $font-weight-book;
margin-top: 5px;
color: $black;
line-height: 1.4;
.icon-container {
display: flex;
align-self: flex-start;
align-items: center;
.icon {
width: 16px;
height: 16px;
}
}
.navi-info-content {
display: flex;
flex-direction: column;
align-items: flex-start;
margin-left: 8px;
margin-right: 8px;
width: 100%;
}
.navi-alert-content {
display: flex;
align-self: flex-start;
margin-left: var(--space-s, 8px);
margin-right: var(--space-m, 16px);
width: 100%;
}
&.info {
background-color: $infobox-color-generic-blue;
}
&.warning {
background-color: #fff8e8;
}
&.alert {
background-color: #fdf3f6;
}
.new-itinerary-search {
padding: var(--space-s, 16px) var(--space-xs, 8px) var(--space-s, 16px)
var(--space-s, 16px);
background: #0074bf;
color: #fff;
border-radius: 999px; // var(--radius-radius-medium, 8px);
margin-top: var(--space-s);
width: 220px;
}
&.slide-out-right {
animation: slideLeft 0.5s cubic-bezier(0.3, -0.05, 0.7, -0.5);
pointer-events: none;
}
.info-close {
display: flex;
align-self: flex-start;
margin-left: 1px;
.icon-container {
height: 32px;
width: 32px;
.icon {
&.notification-close {
width: 32px;
height: 32px;
}
}
}
}
.info-icon {
margin-right: 8px;
}
&.show-card {
animation:
slideDownFromTop $slide-up-down-animation,
fadeIn $slide-up-down-fade;
}
&.hide-card {
animation:
hideTopCard $slide-up-down-animation,
fadeOut $slide-up-down-fade;
pointer-events: none;
}
}
}
.navi-bottom-sheet {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
font-size: $font-size-normal;
text-align: center;
margin: var(--space-m) var(--space-l);
&.ticket-link {
margin: var(--space-m) var(--space-m);
.navi-time {
align-items: inherit;
}
}
.navi-close-button {
border-style: solid;
border-width: 1px;
border-radius: 20px;
width: 100px;
height: 40px;
text-align: center;
background-color: white;
border-color: $cancelation-red;
color: $cancelation-red;
}
.navi-time {
display: flex;
flex-direction: column;
align-items: flex-start;
color: $black;
.navi-daytime {
font-size: $font-size-xsmall;
font-weight: $font-weight-book;
}
}
.navi-ticket-button {
border-radius: 20px;
width: 100px;
height: 40px;
text-align: center;
margin-left: 16px;
background-color: $primary-color;
color: white;
a {
color: white;
text-decoration: none;
}
}
}
@keyframes slideDownFromTop {
from {
transform: translateY(-100%);
margin-top: -65px;
}
to {
transform: translateY(0);
}
}
@keyframes hideTopCard {
from {
transform: translateY(0);
}
to {
transform: translateY(-100%);
margin-top: -65px;
}
}
@keyframes slideUpFromBottom {
from {
transform: translateY(100%);
}
to {
transform: translateY(0);
}
}
@keyframes slideUpToTop {
from {
transform: translateY(0);
}
to {
transform: translateY(calc(-100vh - 100%));
}
}
@keyframes slideLeft {
from {
transform: translateX(0);
}
to {
transform: translateX(-100%);
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}