diff --git a/css/calendar.css b/css/calendar.css
new file mode 100644
index 0000000..dbb14a0
--- /dev/null
+++ b/css/calendar.css
@@ -0,0 +1,118 @@
+.calendar-wrapper {
+ display: block;
+ max-height: 500px;
+ overflow-y: scroll;
+}
+.calendar {
+ font-family: sans-serif;
+ width: 100%;
+ border-spacing: 0;
+ border-collapse: separate;
+ table-layout: fixed;
+ margin-bottom: 50px;
+}
+.calendar thead tr th {
+ background: #626E7E;
+ color: #d1d5db;
+ padding: 0.5em;
+ overflow: hidden;
+}
+.calendar thead tr th:first-child {
+ border-radius: 3px 0 0 0;
+}
+.calendar thead tr th:last-child {
+ border-radius: 0 3px 0 0;
+}
+.calendar thead tr th .day {
+ display: block;
+ font-size: 1.2em;
+ border-radius: 50%;
+ width: 30px;
+ height: 30px;
+ margin: 0 auto 5px;
+ padding: 5px;
+ line-height: 1.8;
+}
+.calendar thead tr th .day.active {
+ background: #d1d5db;
+ color: #626E7E;
+}
+.calendar thead tr th .short {
+ display: none;
+}
+.calendar thead tr th i {
+ vertical-align: middle;
+ font-size: 2em;
+}
+.calendar tbody tr {
+ background: #d1d5db;
+}
+.calendar tbody tr:nth-child(odd) {
+ background: #c8cdd4;
+}
+.calendar tbody tr:nth-child(2n+0) td {
+ border-bottom: 1px solid #626E7E;
+}
+.calendar tbody tr td {
+ text-align: center;
+ vertical-align: middle;
+ border-left: 1px solid #626E7E;
+ position: relative;
+ height: 32px;
+ cursor: pointer;
+}
+.calendar tbody tr td:last-child {
+ border-right: 1px solid #626E7E;
+}
+.calendar tbody tr td.hour {
+ font-size: 2em;
+ padding: 0;
+ color: #626E7E;
+ background: #fff;
+ border-bottom: 1px solid #626E7E;
+ border-collapse: separate;
+ min-width: 100px;
+ cursor: default;
+}
+.calendar tbody tr td.hour span {
+ display: block;
+}
+@media (max-width: 60em) {
+ .calendar thead tr th .long {
+ display: none;
+ }
+ .calendar thead tr th .short {
+ display: block;
+ }
+ .calendar tbody tr td.hour span {
+ transform: rotate(270deg);
+ -webkit-transform: rotate(270deg);
+ -moz-transform: rotate(270deg);
+ }
+}
+@media (max-width: 27em) {
+ .calendar thead tr th {
+ font-size: 65%;
+ }
+ .calendar thead tr th .day {
+ display: block;
+ font-size: 1.2em;
+ border-radius: 50%;
+ width: 20px;
+ height: 20px;
+ margin: 0 auto 5px;
+ padding: 5px;
+ }
+ .calendar thead tr th .day.active {
+ background: #d1d5db;
+ color: #626E7E;
+ }
+ .calendar tbody tr td.hour {
+ font-size: 1.7em;
+ }
+ .calendar tbody tr td.hour span {
+ transform: translateY(16px) rotate(270deg);
+ -webkit-transform: translateY(16px) rotate(270deg);
+ -moz-transform: translateY(16px) rotate(270deg);
+ }
+}
diff --git a/header.php b/header.php
index e03bb99..6ea4c50 100644
--- a/header.php
+++ b/header.php
@@ -8,6 +8,7 @@
+
=isset($additional_head)?PHP_EOL." ".$additional_head.PHP_EOL:""?>
diff --git a/schedule/calendar.php b/schedule/calendar.php
new file mode 100644
index 0000000..bbb015c
--- /dev/null
+++ b/schedule/calendar.php
@@ -0,0 +1,525 @@
+
+
+
+
+
+
+
+
+
+
+ 1
+ Monday
+ Mon
+
+
+ 2
+ Tuesday
+ Tue
+
+
+ 3
+ Wendsday
+ We
+
+
+ 4
+ Thursday
+ Thur
+
+
+ 5
+ Friday
+ Fri
+
+
+ 6
+ Saturday
+ Sat
+
+
+ 7
+ Sunday
+ Sun
+
+
+
+ 00:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 01:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 02:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 03:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 04:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 05:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 06:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 07:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 08:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 09:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 10:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 11:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 13:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 14:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 15:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 16:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 17:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 18:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 19:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 20:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 21:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 22:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 23:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
all times in UTC. current time is =formatdate("now")?>.
this schedule is also available in iCalendar format. point your calendar client at https://tilderadio.org/schedule/ics.php
.