@import url('./icons.css');
font-face {
font-weight: normal;
font-tyle: normal;
}
:root {
overscroll-behavior-y: none;
}
* {
font-family: sans-serif;
box-sizing: border-box;
border-collapse: collapse;
}
body {
margin: 0;
background-color: #333;
}
a {
color: inherit;
}
.invisible {
visibility: hidden !important;
}
.hidden {
display: none !important;
}
.flipped {
transform-origin: center center;
transform: rotate(180deg);
}
.flex-row {
display: flex;
flex-direction: row;
}
.flex-column {
display: flex;
flex-direction: column;
}
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.center {
margin: auto;
}
.spinner {
margin: calc(50vh - 60px) auto;
border: 5px solid rgba(255, 255, 255, .4);
border-top: 5px solid white;
border-radius: 50%;
width: 120px;
height: 120px;
animation: spin 2s linear infinite;
}
.spinning {
animation: spin 2s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.container {
margin: 0 auto;
max-width: 1000px;
}
.header-container {
position: sticky;
top: 0;
z-index: 10;
header {
display: flex;
flex-direction: row;
justify-content: center;
color: white;
background-color: #33691E;
border-bottom: 1px solid rgba(255, 255, 255, .3);
.container {
max-width: 1000px;
width: 80vw;
margin: 0;
}
h3 {
margin-right: 1.5em;
}
.icon-reload {
float: right;
}
.icon-back,
.icon-reload,
.icon-share,
.icon-dots {
cursor: pointer;
width: 32px;
height: 32px;
margin: 12px;
user-select: none;
}
.mode-changers {
margin-top: auto;
margin-left: auto;
height: max-content;
a {
border-bottom: 3px solid transparent;
align-items: center;
display: flex;
padding: 0 1em;
cursor: pointer;
text-decoration: none;
width: max-content;
span {
font-weight: bold;
margin: 1em .4em;
}
}
a.active {
border-bottom: 3px solid white;
}
}
}
}
footer {
color: #ddd;
padding: 2em;
width: max-content;
a {
text-decoration: none;
}
a:after {
margin: 0 8px;
content: "•";
}
:last-child:after {
content: none;
}
}
.card {
overflow-x: auto;
table {
border-bottom: 1px solid rgba(0, 0, 0, 0.3);
width: 100%;
background-color: white;
min-width: 390px;
max-width: 1000px;
}
table a {
padding: 5px 3px;
text-decoration: none;
}
thead {
.center {
padding: 5px 3px;
}
tr:not(:last-child) {
background-color: #eee;
}
}
tbody {
tr {
cursor: pointer;
border-top: 1px solid #ccc;
}
tr:hover {
background-color: #ddd;
}
tr:hover td {
background-color: transparent;
}
}
td, th {
text-align: center;
overflow: hidden;
}
th {
padding: 10px 5px;
}
th.station {
width: 60%;
}
.train-details {
flex-wrap: wrap;
padding: 0 !important;
div {
margin: .4em 2em;
}
}
.cancelled {
text-decoration-line: line-through;
}
.cancelled-text {
font-weight: bold;
color: red !important;
}
}
.settingsView {
.flex-row,
.flex-column {
padding: 1em;
border-bottom: 1px solid rgba(0, 0, 0, .4);
}
.flex-row {
align-items: center;
}
.flex-row:last-child {
padding: .5em;
border-bottom: unset;
justify-content: right;
}
label {
padding: .1em;
}
span {
padding-bottom: .25em;
}
select {
width: 65%;
}
select,
.flex-row div {
margin-left: auto;
}
}
.searchView {
.title {
padding-top: 3em;
h1 {
color: white;
font-weight: normal;
margin: .7em .3em .5em .3em;
}
h1:hover {
-webkit-text-fill-color: transparent;
-webkit-background-clip: text !important;
background: linear-gradient(90deg, #b4dcff 20%, pink 20%, pink 40%, white 40%, white 60%, pink 60%, pink 80%, #b4dcff 80%, #b4dcff 100%);
}
}
.title::before {
content: url('data:image/svg+xml;utf8,');
width: 50px;
height: 50px;
margin: -0.7em .3em -0.5em -0.3em;
}
form {
color: white;
#time, #date, #datetime {
flex-grow: 1;
}
#from, #to, #via {
width: 100%;
}
.button.icon-arrow1,
.button.icon-arrow2,
.button.icon-swap {
padding: .3em .5em;
}
.button.now {
display: flex;
justify-content: center;
align-items: center;
user-select: none;
padding: 0 10px;
}
button[type="submit"],
.button.icon-settings {
height: 32px;
}
.filler {
flex: auto;
}
.button.icon-settings {
width: 32px;
padding: 3px;
}
button[type="submit"]{
display: flex;
align-items: center;
font-size: 20px;
padding: 8px;
}
button[type="submit"]::after {
width: 24px;
height: 24px;
margin-left: 5px;
content: url('data:image/svg+xml;utf8,');
}
}
.suggestions {
position: relative;
overflow: visible;
z-index: 100;
height: 0;
margin-left: 4px;
margin-right: 3.23rem;
p {
font-size: 1.2em;
background-color: white;
color: black;
margin: 0;
border-top: 1px solid rgba(0, 0, 0, .2);
padding: .3em .6em;
cursor: pointer;
}
p:first-child {
margin-top: -4px;
}
p:hover {
background-color: #d3d3d3;
}
#fromSelected,
#viaSelected,
#toSelected {
background-color: #bfbfbf !important;
}
}
.history {
padding: 0 4px;
overflow: hidden;
user-select: none;
.flex-row {
justify-content: space-between;
cursor: pointer;
padding: .3em .6em .3em .3em;
margin: 0;
background-color: white;
color: black;
font-size: 1.2em;
border-bottom: 1px solid rgba(0, 0, 0, .2);
}
.flex-row:last-child {
border-bottom: unset;
}
.via {
font-size: smaller;
font-weight: 200;
}
.from,
.to {
width: 40%;
}
.to {
text-align: right;
}
small::after {
content: "\a";
white-space: pre;
}
.icon-arrow1 {
width: 25px;
}
}
}
.journeyView {
tbody:not(:last-child) {
border-bottom: 1px solid rgba(0, 0, 0, .2);
}
thead>tr:nth-child(2) {
border-bottom: 2px solid #ccc;
}
p {
color: white;
width: 100%;
}
p::before {
filter: drop-shadow( 0 0 5px rgba(0, 0, 0, .6) );
margin-right: 4px;
vertical-align: sub;
}
p.change,
p.walk,
p.transfer {
text-shadow: 0 0 15px rgba(0, 0, 0, .6);
text-align: center;
}
p.change::before {
content: url('data:image/svg+xml;utf8,');
}
p.walk::before {
content: url('data:image/svg+xml;utf8,');
}
p.transfer::before {
content: url('data:image/svg+xml;utf8,');
}
.link {
vertical-align: bottom;
cursor: pointer;
max-inline-size: 26px;
margin: 0 .3em;
}
}
.departuresView {
tbody td:nth-child(2) {
text-align: unset;
}
tbody td {
padding: 5px 3px;
}
}
.remarksView {
.flex-row {
align-items: center;
flex-wrap: nowrap;
padding: .5em;
border-bottom: 1px solid rgba(0, 0, 0, .4);
}
.flex-row:last-child {
border-bottom: unset;
}
span[class^="icon-"] {
align-self: start;
padding-right: .3em;
}
}
#overlay {
z-index: 100;
backdrop-filter: blur(10px);
.modal {
z-index: 1050;
margin: auto;
background-color: white;
width: max-content;
padding: 15px;
-webkit-overflow-scrolling: touch;
}
.modal.alert button {
float: right;
}
.modal.select {
a {
width: 100%;
margin: 5px 0;
text-align: center;
}
a:first-child {
margin-top: unset;
}
a:last-child {
margin-bottom: unset;
}
}
.modal.dialog {
padding: unset;
.body {
max-height: 70vh;
overflow: scroll;
}
.header {
justify-content: space-between;
background-color: #33691E;
color: white;
padding: 15px;
h4 {
margin: 0;
}
.icon-close {
margin: -15px;
padding: 10px;
border-left: 1px solid rgba(0, 0, 0, .4);
cursor: pointer;
}
.icon-close:hover {
background: rgba(0, 0, 0, .4);
}
}
}
}
input,
button,
.button,
.selector {
margin: 4px;
}
input[type="datetime-local"],
input[type="date"],
input[type="time"],
input[type="text"] {
cursor: pointer;
box-sizing: border-box;
padding: .3em .5em;
font-size: 1.5em;
padding: 7px;
border: none;
outline: none;
background-color: white;
color: black;
border-radius: 0;
}
input[type="checkbox"] {
transform: scale(1.5);
}
button,
.button,
.selector label {
background-color: white;
color: black;
cursor: pointer;
user-select: none;
}
button, .button {
width: max-content;
padding: 8px 20px;
transition: background-color 300ms;
border: none;
}
button:hover, .button:hover {
background-color: #d3d3d3;
}
button.color, .button.color {
background-color: #43a047;
color: white;
}
button.color:hover, .button.color:hover {
background-color: #388e3c;
}
.arrowButton {
cursor: pointer;
user-select: none;
height: 72px;
width: 72px;
margin: 0 auto;
transition: transform 150ms;
filter: invert();
}
.selector {
display: flex;
input {
display: none;
}
input + label {
background: #d3d3d3;
}
input:checked + label {
background: white
}
label {
display: flex;
justify-content: center;
align-items: center;
user-select: none;
padding: 0 10px;
}
label:after {
font-size: .9rem;
color: black;
text-align: center;
line-height: .9rem;
margin-top: 2px;
}
div:not(:last-child),
label:not(:last-child) {
border-right: 1px solid #bbb;
}
.icon-ice,
.icon-ic,
.icon-icice,
.icon-dzug,
.icon-regional {
font-style: italic;
}
.icon-tram:after,
.con-bus:after,
.icon-ferry:after,
.icon-taxi:after {
font-size: 0.6rem;
}
.icon-ice:after { content: 'ICE'; }
.icon-ic:after { content: 'IC'; }
.icon-icice:after { content: 'IC ICE'; }
.icon-dzug:after { content: 'D'; }
.icon-regional:after { content: 'NV'; }
.icon-suburban:after { content: 'S'; }
.icon-subway:after { content: 'U'; }
.icon-tram:after { content: 'Tram'; }
.icon-bus:after { content: 'Bus'; }
.icon-ferry:after { content: 'Ferry'; }
.icon-taxi:after { content: 'Taxi'; }
}
.selector.rectangular label {
height: 32px;
width: 32px;
padding: 3px;
font-weight: bold;
overflow: hidden;
}
@media (max-width: 650px) {
.filler {
flex: unset !important;
}
button[type="submit"]{
flex-basis: 100%;
justify-content: center;
}
header {
padding-top: 10px;
.mode-changers {
margin: auto;
}
h3 {
margin: 8px 0;
}
}
#overlay {
.modal.dialog {
width: 100vw;
height: 100vh;
}
}
}
@media (max-width: 799px) {
header {
.icon-back {
left: 10px;
}
}
.searchView {
padding: 10px;
}
.flex-row {
flex-wrap: wrap;
}
.flex-row.nowrap {
flex-wrap: unset;
}
.journeysView {
.arrowButton {
margin: 15px auto;
}
}
.arrowButton {
width: 48px;
height: 48px;
}
}
@media (min-width: 800px) {
.searchView {
form,
.history {
width: 80vw;
max-width: 700px;
color: white;
}
#date {
width: 50%;
}
#time {
width: 30%;
}
}
.journeysView {
.arrowButton.flipped {
margin-top: 45px;
}
table {
margin: 15px auto;
}
}
table {
overflow: hidden;
border: none;
margin: 50px auto;
width: 80vw;
}
#overlay {
.modal.dialog {
width: 600px;
}
}
}